Principal | Gráficos 3D | Gráficos 2D | Fractales | Math | Códigos | Tutoriales | Links
Este código me grafica una función del tipo y=f(x), donde la unica restriccion es que f(x), sea continua en el intervalo [Xmin, Xmax], la función es evaluada en tiempo de ejecución, lo que me permite graficar cualquier tipo de función.
Las siguientes son funciones validas : abs(x), atn(x), arctan(x), cos(x), exp(x), fix(x), int(x), log(x), rnd(x), sgn(x), sin(x), sqr(x), tan(x), min(x), max(x), random(x), mod(x), logn(x), rnd(x), sec(x), cosec(x), cotan(x), arcsin(x), arccos(x), arcsec(x), arccosec(x), arccotan(x), sinh(x), cosh(x), tanh(x).
Grafica de la funcion f(x)=(100/x2)*sin(10/x), con X min=1.0, X max=3.0 y con N puntos=100.
![]() |
El proyecto completo en VisualBasic 5.0 se encuentra en : (plot2d.zip, 6 Kb)
'Ramiro Alcocer 'email : valcoey@hotmail.com 'web : www.oocities.org/valcoey/index.html 'Este programa grafica una funcion f(x) en 2D 'la novedad es que la funcion es evaluada en tiempo 'de ejecucion, para ello utilizo la clase: 'clsEquation.cls Option Explicit 'Maxima cantidad de puntos a calcular Const MaxPuntos = 1000 'para almacenar los valores de la función Dim valx(1 To MaxPuntos) As Double Dim valy(1 To MaxPuntos) As Double 'esto es para guardar los valores escalados de 'la función Dim tmpx(1 To MaxPuntos) As Double Dim tmpy(1 To MaxPuntos) As Double Dim Xmin, Xmax, Ymin, Ymax As Double Dim x1, y1, x2, y2 As Double Dim NPuntos As Long 'dimenciones del PictureBox Dim ScreenX, ScreenY As Long Private objEqu1 As clsEquation Dim MiString As String Private Sub Form_Load() Picture1.ScaleMode = 3 ScreenX = Picture1.ScaleWidth ScreenY = Picture1.ScaleHeight Picture1.BackColor = &HFFFFFF End Sub 'aqui va la función a graficar, la unica restricción es 'que esta función sea continua 'Function f(ByVal X As Double) As Double 'f = (100# / (X * X)) * Sin(10# / X) 'End Function 'Busco el indice del valor máximo de Y (valy(j)) Function PosMaxY() As Long Dim i, j As Integer i = 1 j = NPuntos Do While (i <> j) If (valy(i) <= valy(j)) Then i = i + 1 Else j = j - 1 End If Loop PosMaxY = i End Function 'Busco el indice del valor minimo de Y (valy(j)) Function PosMinY() As Long Dim i, j As Integer i = 1 j = NPuntos Do While (i <>> j) If (valy(i) >= valy(j)) Then i = i + 1 Else j = j - 1 End If Loop PosMinY = i End Function 'Me cálcula los puntos de la funcion Private Sub EvaluarFuncion(f As String) Dim X, deltax As Double Dim i As Integer Set objEqu1 = New clsEquation objEqu1.Equation = f deltax = (Xmax - Xmin) / (NPuntos - 1) X = Xmin For i = 1 To NPuntos 'esto es similar a valy(i)=f(X), evalua la funcion en 'tiempo de ejeucion, donde f tiene que ser una funcion 'continua en el intervalo [xmin, xmax]. objEqu1.Var("x") = X objEqu1.Solve valy(i) = objEqu1.Solution valx(i) = X X = X + deltax Next i Ymin = valy(PosMinY) Ymax = valy(PosMaxY) End Sub 'Escala todos los valores de la función a las dimenciones 'del PictureBox Private Sub EscalarFuncion() Dim sx1, sy1, sx2, sy2 As Double Dim deltax, deltay As Double Dim i As Integer sx1 = 15 sx2 = ScreenX - sx1 sy1 = 15 sy2 = ScreenY - sy1 deltax = (sx2 - sx1) / (Xmax - Xmin) deltay = (sy2 - sy1) / (Ymax - Ymin) For i = 1 To NPuntos tmpx(i) = deltax * (valx(i) - Xmin) + sx1 tmpy(i) = deltay * (valy(i) - Ymin) + sy1 Next i x1 = deltax * (Xmin - Xmin) + sx1 x2 = deltax * (Xmax - Xmin) + sx1 y1 = deltay * (Ymin - Ymin) + sy1 y2 = deltay * (Ymax - Ymin) + sy1 End Sub 'Dibujo la función, utilizando rectas para unir los 'puntos y tambien los ejes en color ROJO Private Sub Plot_Click() Dim i As Integer Picture1.Cls Xmin = Text1.Text Xmax = Text2.Text NPuntos = Text3.Text MiString = Text4.Text EvaluarFuncion (MiString) EscalarFuncion For i = 1 To (NPuntos - 1) Picture1.Line (tmpx(i), ScreenY - tmpy(i))-(tmpx(i + 1), ScreenY - tmpy(i + 1)), RGB(0, 0, 255) Next i Picture1.Line (x1, y1)-(x2, y1), RGB(255, 0, 0) Picture1.Line (x2, y1)-(x2, y2), RGB(255, 0, 0) Picture1.Line (x2, y2)-(x1, y2), RGB(255, 0, 0) Picture1.Line (x1, y2)-(x1, y1), RGB(255, 0, 0) End Sub |
valcoey@hotmail.com
Ramiro Alcocer, 2001
Principal | Gráficos 3D | Gráficos 2D | Fractales | Math | Códigos | Tutoriales | Links