Qt - график рисования QCustomPlot

У меня проблема с отрисовкой графика в библиотеке QCustomPlot. Я хотел бы нарисовать логарифмический график, но я рисую на интервале ‹-3;3>. Поскольку логарифм не определен от -3 до 0, я пытался ничего не делать, рисуя на этом интервале.

У меня есть этот код:

QVector<double> x(10001), y(10001);
QVector<double> x1(10001), y1(10001);

double t=-3; //cas
double inkrement = 0.0006;
for (int i=0; i<10001; i++)//kvadraticka funkcia
{
  x[i] = t;
  y[i] = (-1)*t*t-2;
  t+=inkrement;
}

int g=0;
for(double l=-3;l<3; l+=inkrement) {
   if(l<=0.0) continue;
   else {
   //QMessageBox::warning(this, tr("note"), tr("l=%1\n").arg(l), QMessageBox::Ok);
   x1[g] = l;
   y1[g] = log10(l)/log10(exp(1.0));
   //QMessageBox::warning(this, tr("note"), tr("x1=%1\ny1=%2").arg(x1[g]).arg(y1[g]), QMessageBox::Ok);
   //break;
   g++;
   }
}

customPlot->addGraph();
customPlot->graph(0)->setData(x, y);

customPlot->addGraph();
customPlot->graph(1)->setData(x1, y1);

customPlot->xAxis->setLabel("x");
customPlot->yAxis->setLabel("y");

customPlot->xAxis->setRange(-3, 3);
customPlot->yAxis->setRange(-10, 5);
customPlot->replot();

где x1 и y1 - QVectors... Но график похож на то, что первая точка находится в [0,0]. Итак, у меня есть линия, соединяющая точку [0,0] с логарифмическим графиком, и я не знаю, почему :( Когда я ставлю l=0,0006 перед циклом, все в порядке. Не могли бы вы мне помочь с этим, пожалуйста?


person Gresthorn    schedule 08.10.2013    source источник


Ответы (1)


Кажется, что вы установили количество x1 и y1 перед этим циклом. QVector инициализируется нулями. Поэтому, если вы не установите какое-либо значение для некоторых элементов, то x1 и y1 будут содержать нулевые значения в конце.

Вы должны использовать пустые QVector и добавлять новые значения, если g в порядке:

QVector<double> x1, y1;
//...
x1 << l;
y1 << log10(l)/log10(exp(1.0));

Затем переменную g можно удалить. И я думаю, что лучше удалить переменную i и использовать цикл for(double l = -3; l <= 3; l+=increment).

person Pavel Strakhov    schedule 08.10.2013
comment
Спасибо :) Оператор ‹‹ работает отлично (проблема решена)... но я до сих пор не понимаю, почему мой код ведет себя так, как ведет себя... Это полный код (когда я раскомментирую окно сообщения, оно говорит, что значение l больше 0, а также x1[g] тоже)... Я отредактирую приведенный выше код и заменю его полным кодом. - person Gresthorn; 08.10.2013