Создание графика функции с помощью QCustomPlot

441
10 августа 2017, 23:57

В качестве помощи для рисования графика в 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`

также выдают исключение..

Answer 1

Всё заработало. Так как я переносил рабочий код с Visual Studio то решил глянуть количество итераций там.

Показало 1501. В qt creator i показывало тоже 1501 но сам массив точек QVector был 1499. В итоге к формуле получения количества точек было добавлено +2

int N = ((xmax-xmin)/hh)+2

Итог

Количество точек совпадает с количеством итераций и программа работает.

READ ALSO
&#39;abs&#39;: ambiguous call to overloaded function: исход компиляции многих Direct3D примеров

'abs': ambiguous call to overloaded function: исход компиляции многих Direct3D примеров

ЗдравствуйтеПри компиляции некоторых примеров из MS DirectX SDK (June 2010) происходит

433
Функция с возратом указателя. Как?

Функция с возратом указателя. Как?

Есть такая фот функция:

458
const и перегрузка operator[]

const и перегрузка operator[]

Вопрос касается перегрузки operator[], а именно различия в создании константной и неконстантной версииВ большинстве случаев это будет выглядеть...

484
Проблема при вводе ip из textbox | c++ , winsock

Проблема при вводе ip из textbox | c++ , winsock

При попытке вывести ip, вместо заданного выводятся непонятные цифры

433