Visualizzazione dei risultati da 1 a 3 su 3

Hybrid View

  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    156

    [C++] plot di funzioni: scelta dell'intervallo tra i punti

    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)
    Immagini allegate Immagini allegate

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.