Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
Disegnatore di grafici - Form1.cs

Form1.cs

Caricato da: Matthew
Scarica il programma completo

  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Text;
  7. using System.Windows.Forms;
  8.  
  9. namespace WindowsApplication1
  10. {
  11.     public partial class Form1 : Form
  12.     {
  13.         #region Dichiarazione variabili e costanti
  14.  
  15.         Rectangle Finestra;
  16.         BufferedGraphicsContext buffer;
  17.         BufferedGraphics buf;
  18.         float x, y, x1, y1;
  19.         float scalaX = 15;
  20.         float scalaY = 1;
  21.         float z = -15;
  22.         float x2;
  23.         float y2;
  24.         bool controllore = false;
  25.         int bordoX = 200;
  26.         int bordoY = 100;
  27.         int yNeg = 200;
  28.         #endregion
  29.  
  30.         public Form1()
  31.         {
  32.             InitializeComponent();
  33.         }
  34.  
  35.         float xReale(float xVirtuale)
  36.         {
  37.             return ((xVirtuale * scalaX) + bordoY);
  38.         }
  39.  
  40.         float yReale(float yVirtuale)
  41.         {
  42.             return ((this.Height - bordoX) - yVirtuale*scalaY);
  43.         }
  44.  
  45.  
  46.         private void DrawGraph(object sender, EventArgs e)
  47.         {
  48.             Finestra = new Rectangle(0, 0, this.Width, this.Height);
  49.             buffer = new BufferedGraphicsContext();
  50.  
  51.             buf = buffer.Allocate(this.CreateGraphics(), Finestra);
  52.             buf.Graphics.Clear(Color.White);
  53.  
  54.             button1.Visible = false;
  55.            
  56.             Bitmap pt = new Bitmap(1, 1);
  57.             pt.SetPixel(0, 0, Color.Red);
  58.  
  59.             Font fnt = new Font("Courier New", 12);
  60.  
  61.             #region Disegna valori dell'asse X
  62.             for(x2=0; ((x2 * scalaX) + bordoY)<this.Width; x2+=(75/scalaX))
  63.             {
  64.                 buf.Graphics.DrawLine(Pens.Black, Convert.ToInt32(xReale(x2)), this.Height - bordoX,
  65.                     Convert.ToInt32(xReale(x2)), (this.Height - bordoX) + 10);
  66.                 if (controllore == true)
  67.                
  68.                     buf.Graphics.DrawLine(Pens.LightGray, Convert.ToInt32(xReale(x2)), this.Height, Convert.ToInt32(xReale(x2)), 0);
  69.                 }
  70.                 controllore = true;
  71.  
  72.                 buf.Graphics.DrawLine(Pens.Black, Convert.ToInt32(xReale(x2)), this.Height - bordoX,
  73.                     Convert.ToInt32(xReale(x2)), (this.Height - bordoX) + 10);
  74.  
  75.                 buf.Graphics.DrawString(x2.ToString(),fnt,Brushes.Black,Convert.ToInt32(xReale(x2)-15),(this.Height - bordoX)+10);
  76.            
  77.  
  78.             #endregion
  79.  
  80.             if (z >= 0) yNeg = 0;
  81.      
  82.             #region Disegna valori dell'asse Y
  83.             for (y2 = (50/scalaY)-yNeg; ((this.Height - bordoX) - y2*scalaY) > 0; y2 += 50/scalaY)
  84.             {
  85.                 buf.Graphics.DrawLine(Pens.Black, bordoY, Convert.ToInt32(yReale(y2)), bordoY-15, Convert.ToInt32(yReale(y2)));
  86.  
  87.                 buf.Graphics.DrawLine(Pens.LightGray, bordoY, Convert.ToInt32(yReale(y2)), this.Width, Convert.ToInt32(yReale(y2)));
  88.                
  89.                 buf.Graphics.DrawString(y2.ToString(), fnt, Brushes.Black,
  90.                     Convert.ToInt32(bordoY-60), (Convert.ToInt32(yReale(y2+(7.5f/scalaY)))));
  91.             }
  92.            #endregion
  93.  
  94.             #region Disegna assi cartesiani
  95.            
  96.             buf.Graphics.DrawLine(Pens.Black, bordoY, 0, bordoY, this.Height);
  97.             buf.Graphics.DrawLine(Pens.Black, bordoY - 15, this.Height - bordoX, this.Width, this.Height - bordoX);
  98.            
  99.             #endregion
  100.  
  101.             #region Disegna grafico
  102.             for (;;)
  103.             {
  104.                 x += 0.001f;
  105.  
  106.                 //Funzione del grafico
  107.                 y = x * z + x * x;
  108.  
  109.                 x1 = xReale(x);
  110.                 y1 = yReale(y);
  111.  
  112.                 buf.Graphics.DrawImage(pt, x1, y1);
  113.                
  114.                 if (x1 > this.Width) break;
  115.                 if (y1 > this.Height) break;
  116.             }
  117.             #endregion
  118.  
  119.             buf.Render();
  120.         }
  121.     }
  122. }