Como hacer una grafica de seno y coseno en Visual Basic.net (VB.net)

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:
[vbnet]
Public Class Form1
Dim valores(20000) As Double
Dim xx, puntoX1, puntoY1, puntoX2, puntoY2 As Double
Dim con As Integer = 0
Private Sub txtx_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtx.TextChanged
If txtx.Text <> “” Then
cmd_dibujar.Enabled = True
Else
cmd_dibujar.Enabled = False
End If
End Sub

Private Sub cmd_dibujar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmd_dibujar.Click
Dim dibujo As Graphics = pb.CreateGraphics ‘declaramos area de dibujo
Dim lapiz As New Pen(Color.Black) ‘declaramos lapiz

Dim xcentro As Integer = pb.Width / 2 ‘calculamos cordenadas centrales
Dim ycentro As Integer = pb.Height / 2

dibujo.TranslateTransform(xcentro, ycentro) ‘tranladamos cordenadas al centro
dibujo.ScaleTransform(1, -1) ‘convertimos a cordenadas normales

‘DIBUJAMOS EJES X-Y
dibujo.DrawLine(lapiz, xcentro * -1, 0, xcentro * 2, 0) ‘eje X
dibujo.DrawLine(lapiz, 0, ycentro, 0, ycentro * -1) ‘eje Y

‘DIBUJAMOS PUNTOS +X
Dim a As Integer
For a = 0 To xcentro * 2 Step (pb.Width / (Val(txtx.Text) * 2))
dibujo.DrawLine(lapiz, a, 5, a, -5)
Next

‘DIBUJAMOS PUNTOS -X
For a = 0 To xcentro * -1 Step (-1 * pb.Width / (Val(txtx.Text) * 2))
dibujo.DrawLine(lapiz, a, 5, a, -5)
Next

‘DIBUJAMOS GRAFICA SENO-COSENO
If rb_seno.Checked = True Then ‘SENO
con = 0
For xx = xcentro * -1 To xcentro * 2 Step 0.1
valores(con) = System.Math.Sin(xx)
con = con + 1
Next

con = 1
For xx = (xcentro * -1) + 0.1 To xcentro * 2 Step 0.1 ‘iniciamos una cordenada X adelante
‘sacamos coordenadas 1
puntoX1 = (xx – 0.1) * (pb.Width / (Val(txtx.Text) * 2))
puntoY1 = valores(con – 1) * ycentro

‘sacamos coordenadas 2
puntoX2 = xx * (pb.Width / (Val(txtx.Text) * 2))
puntoY2 = valores(con) * ycentro

dibujo.DrawLine(lapiz, Convert.ToSingle(puntoX1), Convert.ToSingle(puntoY1), Convert.ToSingle(puntoX2), Convert.ToSingle(puntoY2))
con = con + 1
Next
Else ‘COSENO
con = 0
For xx = xcentro * -1 To xcentro * 2 Step 0.1
valores(con) = System.Math.Cos(xx)
con = con + 1
Next

con = 1
For xx = (xcentro * -1) + 0.1 To xcentro * 2 Step 0.1 ‘iniciamos una cordenada X adelante
‘sacamos coordenadas 1
puntoX1 = (xx – 0.1) * (pb.Width / (Val(txtx.Text) * 2))
puntoY1 = valores(con – 1) * ycentro

‘sacamos coordenadas 2
puntoX2 = xx * (pb.Width / (Val(txtx.Text) * 2))
puntoY2 = valores(con) * ycentro

dibujo.DrawLine(lapiz, Convert.ToSingle(puntoX1), Convert.ToSingle(puntoY1), Convert.ToSingle(puntoX2), Convert.ToSingle(puntoY2))
con = con + 1
Next
End If
End Sub
End Class
[/vbnet]
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

Share Button
Latest Comments

Leave a Reply

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *