Buenas!

Este será mi primer post de una serie de programas que estaré subiendo desarrollados en Visual Basic.net
Esta aplicación dibuja en un picturebox la grafica del seno o coseno, tu lo seleccionarás ;)
Te explicare en pocos pasos que es lo que se tiene que hacer.

Primero crea un formulario y en él introduce los siguientes objetos con sus respectivas propiedades:

  • System.Windows.Forms.Picturebox
    • name=pb
    • borderStyle=FixedSingle
    • Dock=top
  • System.Windows.Forms.Label
    • name=label1
    • text=Valores en X
  • System.Windows.Forms.Textbox
    • name=txtx
  • System.Windows.Forms.RadioButton
    • name=rb_seno
    • text=Seno
  • System.Windows.Forms.RadioButton
    • name=rb_coseno
    • text=Coseno
  • System.Windows.Forms.Button
    • name=cmd_dibujar
    • text=Dibujar

te quedará algo parecido a esto:

El codigo es el siguient:

VB.NET:
  1. Public Class Form1
  2.     Dim valores(20000) As Double
  3.     Dim xx, puntoX1, puntoY1, puntoX2, puntoY2 As Double
  4.     Dim con As Integer = 0
  5.     Private Sub txtx_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtx.TextChanged
  6.         If txtx.Text <> "" Then
  7.             cmd_dibujar.Enabled = True
  8.         Else
  9.             cmd_dibujar.Enabled = False
  10.         End If
  11.     End Sub
  12.  
  13.     Private Sub cmd_dibujar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmd_dibujar.Click
  14.         Dim dibujo As Graphics = pb.CreateGraphics 'declaramos area de dibujo
  15.         Dim lapiz As New Pen(Color.Black)          'declaramos lapiz
  16.  
  17.         Dim xcentro As Integer = pb.Width / 2 'calculamos cordenadas centrales
  18.         Dim ycentro As Integer = pb.Height / 2
  19.  
  20.         dibujo.TranslateTransform(xcentro, ycentro) 'tranladamos cordenadas al centro
  21.         dibujo.ScaleTransform(1, -1)                'convertimos a cordenadas normales
  22.  
  23.         'DIBUJAMOS EJES X-Y
  24.         dibujo.DrawLine(lapiz, xcentro * -1, 0, xcentro * 2, 0)  'eje X
  25.         dibujo.DrawLine(lapiz, 0, ycentro, 0, ycentro * -1) 'eje Y
  26.  
  27.         'DIBUJAMOS PUNTOS +X
  28.         Dim a As Integer
  29.         For a = 0 To xcentro * 2 Step (pb.Width / (Val(txtx.Text) * 2))
  30.             dibujo.DrawLine(lapiz, a, 5, a, -5)
  31.         Next
  32.  
  33.         'DIBUJAMOS PUNTOS -X
  34.         For a = 0 To xcentro * -1 Step (-1 * pb.Width / (Val(txtx.Text) * 2))
  35.             dibujo.DrawLine(lapiz, a, 5, a, -5)
  36.         Next
  37.  
  38.         'DIBUJAMOS GRAFICA SENO-COSENO
  39.         If rb_seno.Checked = True Then        'SENO
  40.             con = 0
  41.             For xx = xcentro * -1 To xcentro * 2 Step 0.1
  42.                 valores(con) = System.Math.Sin(xx)
  43.                 con = con + 1
  44.             Next
  45.  
  46.             con = 1
  47.             For xx = (xcentro * -1) + 0.1 To xcentro * 2 Step 0.1  'iniciamos una cordenada X adelante
  48.                 'sacamos coordenadas 1
  49.                 puntoX1 = (xx - 0.1) * (pb.Width / (Val(txtx.Text) * 2))
  50.                 puntoY1 = valores(con - 1) * ycentro
  51.  
  52.                 'sacamos coordenadas 2
  53.                 puntoX2 = xx * (pb.Width / (Val(txtx.Text) * 2))
  54.                 puntoY2 = valores(con) * ycentro
  55.  
  56.                 dibujo.DrawLine(lapiz, Convert.ToSingle(puntoX1), Convert.ToSingle(puntoY1), Convert.ToSingle(puntoX2), Convert.ToSingle(puntoY2))
  57.                 con = con + 1
  58.             Next
  59.         Else                                  'COSENO
  60.             con = 0
  61.             For xx = xcentro * -1 To xcentro * 2 Step 0.1
  62.                 valores(con) = System.Math.Cos(xx)
  63.                 con = con + 1
  64.             Next
  65.  
  66.             con = 1
  67.             For xx = (xcentro * -1) + 0.1 To xcentro * 2 Step 0.1  'iniciamos una cordenada X adelante
  68.                 'sacamos coordenadas 1
  69.                 puntoX1 = (xx - 0.1) * (pb.Width / (Val(txtx.Text) * 2))
  70.                 puntoY1 = valores(con - 1) * ycentro
  71.  
  72.                 'sacamos coordenadas 2
  73.                 puntoX2 = xx * (pb.Width / (Val(txtx.Text) * 2))
  74.                 puntoY2 = valores(con) * ycentro
  75.  
  76.                 dibujo.DrawLine(lapiz, Convert.ToSingle(puntoX1), Convert.ToSingle(puntoY1), Convert.ToSingle(puntoX2), Convert.ToSingle(puntoY2))
  77.                 con = con + 1
  78.             Next
  79.         End If
  80.     End Sub
  81. End Class

El codigo está comentado, pero lo explicare en pocas palabras.

En teoría lo que hago es crear un vector con un valor en Y para cada valor en X calculada con la funcion Seno o Coseno de la clase System.Math, ya después de obtener el vector simplemente dibujamos una serie de puntos muy diminutos (casi pixeles) y trazamos una linea entre punto y punto, provocando el efecto de linea continua y curvada. Simple no?
Es decir que mi vector (para la grafica del seno) quedaría algo parecido a esto:

Y como podras darte cuenta, el valor de X va incrementandose hasta el infinito de 0.1 en 0.1 pero el valor de Y solo sube y baja en un rango de -1 a 1, por lo tanto se nos facilita obtener su valor y primeramente guardarlo en un vector y despues simplemente graficar una serie muy grande de puntitos, que desde lejos (tu sentado frente a la computadora) se verá como una linea continua y no como una serie de puntos que es en realidad lo que son... Aqui te dejo una imagen para que compruebes como la funcion Seno y Coseno varian entre -1 y 1 en Y....

Cualquier duda comentala aquí por favor ;)

Aquí te dejo los archivos para que los descargues :P saludos!


Archivos