struct eph { QString date; float latitude; float longitude; float zrvLat[37]; float zrvLon[37];};
struct pattern { int cm; // col modofyer bool m[180][360];};
int indx, satIndex, ephIndex, patternIndex, cm, currentCol, row, i, j; bool inverted; float latitude; for( indx = 0, satIndex = activeSats.at(indx); indx < activeSatsNum; indx++) { for( ephIndex = intervalBegin; ephIndex <= intervalEnd; ephIndex++) { inverted = false; latitude = satList->at(satIndex)->at(ephIndex).latitude; if(latitude < 0) { inverted = true; latitude *= -1; } // т.е. patternIndex - int, а latitude - float, то так я грубо получаю индекс шаблона для соответствующей широты. patternIndex = latitude; // ! вот здесь начинается интересное, подробности ниже. if(patternIndex >= 83) continue; // "затычка" на случай если индекс уйдёт за границы patterns. cm = patterns->at(patternIndex).cm; currentCol = (satList->at(satIndex)->at(ephIndex).longitude + 180); // т.к. долгота - это диапазон из значений от -180 до +180, а моя матрица - от 0 до 360. for(i = 0; i < 180; i++) for(j = 0; j < 360; j++) if(patterns->at(patternIndex).m[i][j]) { row = i; // это если рассчёт идёт для отрицательной широты if(inverted) row = 180 - row; rm->slotAddToMatrix(row, currentCol + (j - cm)); } else ; QApplication::processEvents(0); ui.debug->append(QString::number(indx+1) + "/" + QString::number(activeSatsNum) + "::" + QString::number(ephIndex) + "/" + QString::number(intervalEnd)); } }
patternIndex = <любое int значение>; //не выходящее за границы patterns, конечно
C++ (Qt)assert(i >= 0 && i < LAT_DIV);assert(j >= 0 && j < LONG_DIV);int val = m[i][j];
C++ (Qt)MyWidget::~MyWidget( void ){ qDebug() << "destructor" << this;}
rm->slotAddToMatrix();
clm->slotAddToMatrix();