В качестве помощи для рисования графика в Qt Creator была использована QCustomPlot(установлена правильно так как пример скомпилировался)
inline double fn(int T, double x)
{
if (x >= 0)
return T;
return 0;
}
void MainWindow::drawfunc(int valT, int xmin, int xmax) //Вывод функции Хэвисайда
{
double hh =0.01;
int N = (xmax-xmin)/hh;//считается количество точек для массивов координат xmax=10,xmin=-5 итого 1500
QVector<double> x11(N), y11(N); // //Массивы координат точек
int i=0;
for (double x = xmin; x < xmax; x +=hh)
{
x11[i]=x;
y11[i]=fn(valT,x);
i++;
}
ui->widget->clearGraphs();
ui->widget->addGraph();
ui->widget->graph(0)->setData(x11, y11);
// задаем имена осей координат
ui->widget->xAxis->setLabel("x");
ui->widget->yAxis->setLabel("y");
// задаем размеры осей
ui->widget->xAxis->setRange(xmin, xmax);
ui->widget->replot();
}
Проблема в том что график не рисуется,вылетает исключение
ASSERT failure in QVector<T>::operator[]: "index out of range", file ..\..\..\..\Qt\5.3\mingw482_32\include/QtCore/qvector.h, line 385
По - шагово при отладке выяснилось что:
-проблема из за QVector
Количество точек 1500(подсчёт формулы вручную),Qt Creator выдаёт 1499.
Такие несложные приёмы как
int N = ((xmax-xmin)/hh)+1 или `QVector<double> x11(N+1), y11(N+1)` `i=1`
также выдают исключение..
Всё заработало.
Так как я переносил рабочий код с Visual Studio
то решил глянуть количество итераций там.
Показало 1501
.
В qt creator
i
показывало тоже 1501
но сам массив точек QVector
был 1499
.
В итоге к формуле получения количества точек было добавлено +2
int N = ((xmax-xmin)/hh)+2
Итог
Количество точек совпадает с количеством итераций и программа работает.
ЗдравствуйтеПри компиляции некоторых примеров из MS DirectX SDK (June 2010) происходит
Вопрос касается перегрузки operator[], а именно различия в создании константной и неконстантной версииВ большинстве случаев это будет выглядеть...
При попытке вывести ip, вместо заданного выводятся непонятные цифры