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)
questa invece è la parte dove trovo i punti da disegnarecodice://... 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);
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.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); }
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)

Rispondi quotando