Problemi nel disegnare una circonferenza

mercoledì 21 ottobre 2009 - 18.15

Fristallo Profilo | Newbie

Salve a tutti, vorrei cercare di plottare su di un forum il grafico di una semplice funzione ( nel caso specifico Y=X^2 ); ho cercato del materiale per studiare la classe graphics ma non riesco a tirar fuori nulla di funzionante. Posto ciò che finora ho scritto e che non ha prodotto i risultati sperati . Chi mi saprebbe guidare passo passo?

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

P.S. Chiedo scusa per il titolo del post: ero partito con il voler disegnare una circonferenza e strada facendo l'ho "declassata" in una parabola ...se il moderatore può modificare il titolo del post gli e ne sono grato

alexmed Profilo | Guru

Ciao
Di seguito il codice che dovrebbe fare al tuo caso:


Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Altrimenti trovi tanti esempi qui:

http://www.java2s.com/Code/VB/2D/Catalog2D.htm

Ciao

alexmed

Fristallo Profilo | Newbie

Ciao, grazie per la celere ed esauriente risposta.
Ho studiato un pò il tuo codice ed ho capito il modo esatto di procedere.
Nonostante però io abbia importato
Imports System.Drawing Imports System Imports System.Drawing.Text Imports System.Windows.Forms Imports System.Drawing.Drawing2D Imports System.Drawing.Design

non riesco a definire l'origine degli assi come hai fatto tu in quanto quando vado a srivere "e.graphics...." non mi riconosce il "graphics".... cosa sbaglio?
Capisco che sto a livelli terra terra e magari chiedo cose veramente sceme....mi scuso con tutti per le eventuali mie corbellerie.

alexmed Profilo | Guru

Se fai caso il codice è stato inserito nell'evento Paint della Form

Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint

che prevede che il costruttore ByVal "e" As ... (ma potrebbe essere anche ByVal "pippo" As ...) .PaintEventArgs disegni qualcosa

Meglio comunque che ti rimandi alla guida:
http://msdn.microsoft.com/it-it/library/system.windows.forms.painteventargs.painteventargs.aspx

Ciao

alexmed

luigidibiasi Profilo | Guru

Mi permetto di aggiungere una info alla risposta di alexmed per quanto riguarda l'oggetto Graphics

>> "e.graphics...." non mi riconosce il "graphics".... cosa sbaglio?
Oltre a farti restituire graphics tramite l'evento onPaint (e quindi disegnado sul form)

puoi istanziare l'oggetto graphics manualmente e usarlo per scrivere su delle immagini in memoria che poi userai come megli credi (come sfondo del form, in una picturebox o per salvarle sul disco)

Dim b As Bitmap = New Bitmap(800, 600, Imaging.PixelFormat.Format32bppArgb)
Dim ew As Graphics = Graphics.FromImage(b)



>> oltre a fromimage graphics ti dà altri metodi From per recuperare la classe su altre fonti
Luigi Di Biasi
http://blogs.dotnethell.it/luigidibiasi/
http://www.dibiasi.it/

Fristallo Profilo | Newbie

Ho studiato e compreso il codice postato in precedenza: ora tutto funziona. Ho provato quindi a complicare un poco l'algoritmo introducendo una textbox nella quale andare ad immettere una generica funzione e subito mi sorge un problema: attualmente la funzione viene plottata automaticamente al caricamento del form; io invece vorrei che il form apparisse, mi lasciasse la possibilità di immettere nella textbox una funzione generica e poi, clikkando su un button, questa venisse plottata. Ho pensato che l'evento click del button potesse richiamare la sub "Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint".... sarebbe corretto operare in questa maniera? Nell'ipotesi che quanto ho esposto sia corretto, come dovrei fare per richiamare la sub?
Ultima cosa: essendo il sistema di riferimento della form con l'asse Y positivo verso il basso, formalmente, la parabola di eq Y=x^2 che viene disegnata sullo schermo è errata in quanto con la concavità verso il basso; ho risolto mettendo un "-" avanti alla variabile indipendente...è corretto o c'è un altro modo per risolvere il problema?
Grazie a tutti quelli che vorranno chiarirmi le idee

luigidibiasi Profilo | Guru

Se guardi il post precedente trovi il codice per istanziare graphics senza usare la Paint... invece di implementare il plotting nell'evento paint puoi implementarlo nell'evento click del button...

l'unica accortenza e quella di settare l'immagine di background del form in base a quella che ti generi nell'evento.. ( cosa che prima faceva in automatico essendo già nella routine di painting)
Luigi Di Biasi
http://blogs.dotnethell.it/luigidibiasi/
http://www.dibiasi.it/

alexmed Profilo | Guru

Oppure ti appoggi ad una PictureBox, ed in questo caso nell'evento click del Button1 metti:


Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Naturalmente devi aggiungere nella Form un controllo PictureBox.

Ciao

alexmed

Fristallo Profilo | Newbie

Grazie a tutti, ho capito.
Alla prossima difficoltà.....
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5