2013-10-08 5 views
1

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

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

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 перед циклом, все в порядке. Не могли бы вы мне помочь?

ответ

1

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

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

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

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

+0

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

Смежные вопросы