2013-10-08 3 views
1

J'ai un problème avec le dessin du graphique dans la bibliothèque QCustomPlot. Je voudrais dessiner un graphique de logarithme mais j'utilise le dessin sur l'intervalle < -3; 3>. Comme le logarithme n'est pas défini de -3 à 0, j'ai essayé de ne rien faire en dessinant sur cet intervalle.Qt - QCustomPlot peinture graphique

Je possède ce code:

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(); 

où x1 et y1 sont QVectors ... Mais le graphique est comme le premier point est en [0,0]. Donc j'ai alors une ligne qui relie le point [0.0] au graphe logarithme et je ne sais pas pourquoi :( Quand je mets l = 0.0006 avant le cycle, tout est OK, peux-tu m'aider s'il te plaît?

Répondre

1

Il semble que vous définissez le nombre de x1 et y1 avant cette boucle. QVector est initialisé avec des zéros. donc, si vous ne définissez pas de valeur pour certains articles, alors x1 et y1 contiendra des valeurs zéro à leur extrémité.

vous devez utiliser vide QVector et de ajouter de nouvelles valeurs si g est OK:

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

g variable peut être retiré alors. Et je pense qu'il est préférable d'enlever la variable i et d'utiliser la boucle for(double l = -3; l <= 3; l+=increment).

+0

Merci :) Opérateur << fonctionne parfaitement (problème résolu) ... mais je ne comprends toujours pas pourquoi mon code se comporte comme il se comporte ... Ceci est un code complet (quand je décommente message boîte, il dit, que la valeur l est supérieure à 0, et aussi x1 [g] est aussi) ... Je vais éditer le code ci-dessus et le remplacer par du code complet. – Gresthorn

Questions connexes