ho ripreso dopo molto tempo un progetto che avevo iniziato un po' di tempo fa: un programma scritto in c++ (framework QT) che disegnasse grafici (sia nella forma y=f(x) sia f(x,y)=0 )
nonostante sto utilizzando Qt il mio problema è al livello dell'algoritmo ideale per riuscire a disegnare il grafico "senza lasciare spazi vuoti". mi spiego meglio.
Ecco il codice (semplificato, per ora mi interessa capire il metodo da seguire)
codice:
//...
QGraphicsScene *scena;
//...
//mi trovo in uno slot che viene chiamato alla pressione di un bottone
void MainWindow::on_pushButton_clicked()
{
//inizializzo l'ambiente grafico
scena=new QGraphicsScene;
ui->graphicsView->setScene(scena);
//disegno gli assi cartesiani
scena->addLine(-(ui->graphicsView->width()/2)-1,0,(ui->graphicsView->width()/2)-1,0);
scena->addLine(0,-(ui->graphicsView->height()/2)-1,0,(ui->graphicsView->height()/2)-1);
ui->graphicsView->setAlignment(Qt::AlignCenter);
questa invece è la parte dove trovo i punti da disegnare
codice:
//PARTE IMPORTANTE QUI
//513x338 sono le dimensioni del graphicsview
double convertx;
convertx=(double)20/(double)513; //francamente non ricordo perchè questo 20 a numeratore, ma avrò avuto un buon motivo...forse
double converty;
converty=(double)20/(double)338;
//fattore di conversione=1/step
for(int x=-256;x<256;x++)
{
double tempx;
tempx=x*convertx;
double tempy;
tempy=1/sin(tempx*tempx); //questa è solo una funzione di prova, nella versione definitiva l'utente potrà inserirla run time
double y;
y=tempy/convertx;
scena->addLine(x,-y,x,-y);
}
ui->graphicsView->centerOn(0,0);
}
in pratica ho usato le variabili convertx e converty per passare a valori di x e y che potessero meglio essere utilizzati per rappresentarli sul piano, ma il risultato è quello allegato.
a parte che mi sembra di aver confuso un po' troppo il codice, ma oltretutto il risultato non è quello sperato (non pretendo questo http://www.google.it/#rlz=1C2_____en...&q=y%3D1%2Fsin(x)&oq=y%3D1%2Fsin(x)&gs_l=hp.3..0i30l2j0i8i30l2.9 6993.97147.4.97940.2.2.0.0.0.1.204.402.0j1j1.2.0.. .0.0.0..1c.1.17.psy-ab.7TR-StobswY&pbx=1&bav=on.2,or.r_qf.&bvm=bv.47883778,d. bGE&fp=d5b4d4f11448880b&biw=1280&bih=638
però almeno vorrei evitare quei punti la cui distanza l'uno con l'altro va sempre più aumentando)