SlideShare una empresa de Scribd logo
1 de 9
Descargar para leer sin conexión
Sección
Revista digital Matemática, Educación e Internet (www.cidse.itcr.ac.cr/revistamate/). Vol. 1, No
2. Agosto − Diciembre 2001.
Gráficos de funciones en Visual Basic
Luis Acuña P.
lacuna@itcr.ac.cr
Escuela de Matemática
Instituto Tecnológico de Costa Rica
Introducción
En esta columna desarrollamos un programa en Visual Basic que permitirá al usuario graficar una función
cuadrática y observar el efecto de cada uno de los coeficientes sobre el gráfico.
Visual Basic es un ambiente de programación fundamentalmente gráfico. Todos los controles que se colocan
en un formulario, y el texto que se escriba en ellos, se “dibuja” como gráficos en la pantalla. Muchos controles
permiten que se muestren gráficos en ellos, como los botones de comando y los cuadros de imagen. Estos
gráficos normalmente vienen de archivos cuyo contenido se muestra en el control.
Pero los formularios y los cuadros de dibujo van más allá: estos tienen propiedades y métodos diseñados
específicamente para graficar en ellos. No solamente para mostrar archivos de imágenes, sino para dibujar
puntos, segmentos, curvas y otras figuras geométricas.
Cuadros de dibujo
Los formularios y los cuadros de dibujo (PictureBox) tienen las propiedades ScaleLeft, ScaleTop,
ScaleWidth y ScaleHeight, que determinan la escala de los gráficos que contendrán. Podemos pensar
en los formularios y cuadros de dibujo como ventanas a un sector rectangular de un plano coordenado. Las
propiedades ScaleLeft y ScaleTop dan las coordenadas de la esquina superior izquierda del sector, y las
propiedades ScaleWidth y ScaleHeight dan el ancho y el alto del sector, como se ve en el siguiente
diagrama:
ScaleLeft
ScaleTop
ScaleWidth
ScaleHeight
?
-
-
6
?
Por omisión, los valores de ScaleLeft y ScaleTop son 0, y los de ScaleWidth y ScaleHeight son iguales
a Width y Height, el tamaño del formulario o control en las unidades de medida activas (twips, pixels, cms,
etc.). Pero usualmente ScaleWidth y ScaleHeight recibirán valores que dependen del sector del plano que
queremos representar, independientemente del tamaño real. Por ejemplo, si en un rectángulo de 4 cm por 5
cm queremos representar el rectángulo [3,9]×[−1,8] del plano cartesiano, entonces Width y Height serán
4cm y 5cm (o su equivalente en twips, pixels, etc), pero ScaleWidth y ScaleHeight serán 6 y9.
La esquina superior izquierda tiene coordenadas (ScaleLeft,ScaleTop) y la inferior derecha tiene co-
ordenadas (ScaleLeft + ScaleWidth,ScaleTop + ScaleHeight). Para representar un sector del plano
2 Revista digital Matemática, Educación e Internet (www.cidse.itcr.ac.cr/revistamate/). Vol 1, No 2. Agosto − Diciembre 2001.
cartesiano con la orientación usual (x mayores a la derecha, y mayores arriba), ScaleWidth debe ser positivo
y ScaleHeight negativo. Por ejemplo, haciendo ScaleLeft = 5, ScaleTop = 20, ScaleHeight = −15 y
ScaleWidth = 40 se consigue:
(5,20) (45,20)
(5,5) (45,5)
Los valores de estas propiedades pueden asignarse durante el diseño, o durante la ejecución de dos formas:
con asignaciones explícitas (ScaleLeft = 5, etc.) o con la instrucción
Objeto.Scale (XIzq, YArriba) - (XDer, YAbajo)
donde XIzq y XDer son los extremos izquierdo y derecho de la coordenada X, y YArriba y YAbajo son
los extremos superior e inferior de la coordenadaY. Objeto es el control para el cual se define la escala;
si se omite, se supone que es el formulario. Para el cuadro mostrado, la instrucción es Scale (5, 20) -
(45, 5).
Puntos y segmentos
Para dibujar un punto en un formulario o cuadro de dibujo se usa el método PSet, con la sintaxis
Objeto.PSet(x, y), color
donde x y y son las coordenadas del punto, y color es el color deseado. El color es opcional; si no se indica
se usa el ForeColor del objeto (como antes, si no se indica Objeto la instrucción se aplica al formulario).
El siguiente ejemplo muestra cómo dibujar mil puntos aleatorios en el formulario cada vez que se hace click
en él. En la Figura 1 vemos el resultado.
Private Sub Form_Click()
Dim i As Integer ’ contador
Dim x As Single, y As Single ’ coordenadas
For i = 1 To 1000 ’ dibujar 1000 puntos
x = Rnd * ScaleWidth
y = Rnd * ScaleHeight
PSet (x, y)
Next
End Sub
Revista digital Matemática, Educación e I nternet (www.cidse.itcr.ac.cr/revistamate/). Vol 1, No 2. Agosto − Diciembre 2001. 3
Para cada punto, sus coordenadas son números aleatorios entre 0 y el ancho o el alto del formulario. Esto
distribuirá los puntos uniformemente si las coordenadas izquierda e inferior son ambas 0.
A menos que se defina otro valor para ForeColor, los puntos serán de color negro. Si la propiedad
AutoRedraw del formulario se deja en su valor inicial (falso), puede notarse que al hacer más pequeño
el formulario y luego volverlo a su tamaño anterior los puntos se pierden. Puede probarse lo siguiente: Correr
el programa; hacer click sobre el formulario; maximizar el formulario (los puntos anteriores se mantienen);
hacer click con el formulario maximizado; minimizar el formulario; maximizarlo de nuevo. En este mo-
mento se nota que los puntos que se habían dibujado la primera vez que se maximizó el formulario ya
desaparecieron. En cambio, si la propiedad AutoRedraw se hace verdadera, todos los puntos se mantienen
aunque el formulario cambie de tamaño.
Los segmentos de recta se dibujan con el método Line, cuya sintaxis es
Objeto.Line (x1, y1)-(x2, y2), color
donde (x1,y1) y (x2,y2) son las coordenadas de los extremos, y el parámetro color es opcional; si no se
indica se usa ForeColor
Una forma de indicar un color aleatorio es con la expresión RGB(255 * Rnd(), 255 * Rnd(), 255 *
Rnd()). La siguiente subrutina dibuja veinte segmentos aleatorios con color aleatorio en el formulario cada
vez que se hace click en él. El resultado se muestra en la Figura 2.
Private Sub Form_Click()
Dim x1 As Single, y1 As Single ’ 1er punto
Dim x2 As Single, y2 As Single ’ 2do punto
Dim i As Byte ’ contador
For i = 1 To 20 ’ dibujar 20 segmentos
x1 = Rnd * ScaleWidth
y1 = Rnd * ScaleHeight
x2 = Rnd * ScaleWidth
y2 = Rnd * ScaleHeight
Line (x1, y1)-(x2, y2), _
RGB(255 * Rnd(), 255 * Rnd(), 255 * Rnd())
Next
End Sub
4 Revista digital Matemática, Educación e Internet (www.cidse.itcr.ac.cr/revistamate/). Vol 1, No 2. Agosto − Diciembre 2001.
En el método Line es posible omitir el primer punto y escribir sólo
Objeto.Line -(x2, y2)
En ese caso, el punto inicial es el último punto que se había dibujado. Si en el ejemplo anterior quitamos la
parte (x1,y1), lo que obtenemos es una sucesión de segmentos conectados (el primer segmento empieza en
(0,0)).
Curvas
Visual Basic no define ningún método para graficar curvas, pero la técnica usual es dibujar varios segmentos
pequeños consecutivos. Vamos a desarrollar un programa que le permitirá al usuario definir la ecuación de
una parábola, y le mostrará el gráfico en un cuadro de dibujo. El usuario escribe los coeficientes a, b y c en
la ecuación y = ax2 +bx +c de la parábola, y también los extremos xmin y xmax del dominio. En la Figura3
vemos el resultado de este proyecto.
Los cuadros de texto con los coeficientes de x2, de x y el constante, se llaman txtA, txtB y txtC. Los cuadros
con los extremos del dominio se llaman txtXmin y txtXmax. El cuadro donde se graficará la función es
picGrfico, y el botón de comando es cmdGraficar.
Revista digital Matemática, Educación e I nternet (www.cidse.itcr.ac.cr/revistamate/). Vol 1, No 2. Agosto − Diciembre 2001. 5
En la ventana de código definimos la función por graficar:
’ Coeficientes de la funcin
Dim a As Single, b As Single, c As Single
’ Dominio y rango del grfico
Dim Xmin As Single, Xmax As Single ’ dominio
Dim Ymin As Single, Ymax As Single ’ rango
Private Function f(x As Single) As Single
’ La funcin por graficar
f = a * x ^ 2 + b * x + c
End Function
Las variables a, b y c son globales porque sus valores se les asignarán en cmdGraficar_Click y se usarán
en f. También Xmin, Xmax, Ymin y Ymax, los extremos del dominio y del rango, son globales porque se
definirán en cmdGraficar_Click y se usarán en Graficar, como veremos más tarde. A grandes rasgos, lo
que cmdGraficar_Click debe hacer es lo siguiente:
1. Leer y validar los datos (coeficientes y dominio)
2. Calcular el rango (mínimo y máximo para y)
3. Definir la escala de picGrfico
4. Llamar Graficar para graficar los ejes y la parábola.
Como veremos, los preparativos tomarán mucho más trabajo que propiamente graficar la función.
Para validar los datos hay dos condiciones: El valor de a no puede ser cero, y xmin debe ser estrictamente
menor que xmax. Si cualquiera de esas condiciones falla, la subrutina dará un mensaje de error y retornará.
Para calcular el rango necesitamos un poco de álgebra: Los puntos máximo y mínimo de una parábola
restringida a un intervalo se encuentran en los extremos del intervalo (xmin o xmax) o en el vértice. El vértice
tiene coordenada X igual a xv = −b/2a, pero si xv no pertenece al dominio, el máximo y el mínimo están en
los extremos del intervalo. Entonces el valor máximo de y, que denotaremos ymax, es el mayor entre f(xmin),
f(xmax) y f(xv) si xv ∈ [xmin,xmax], o solamente entre f(xmin) y f(xmax) si no. El cálculo de ymin es análogo.
Una vez determinados el máximo y el mínimo para x y para y, la escala de picGrfico se define con la
instrucción
picGrfico.Scale (Xmin, Ymax)-(Xmax, Ymin)
(recordemos que el método Scale necesita la esquina superior izquierda y la inferior derecha).
Finalmente, cmdGraficar_Click llamará a un procedimiento Graficar. Éste usa las variables globales
Xmin, Xmax, Ymin y Ymax y grafica la parábola en el rectángulo [xmin,xmax] × [ymin,ymax] del plano. Eso lo
hace en dos pasos:
1. Graficar los ejes de coordenadas, para lo cual basta con dos instrucciones
picGrfico.Line (0, Ymin)-(0, Ymax) picGrfico.Line (Xmin,0)-(Xmax, 0)
Si alguno de los ejes no apareciera en el gráfico, la instrucción correspondiente no tiene ningún efecto
visible.
6 Revista digital Matemática, Educación e Internet (www.cidse.itcr.ac.cr/revistamate/). Vol 1, No 2. Agosto − Diciembre 2001.
2. Graficar la función con 100 segmentos de recta entre 101 puntos consecutivos sobre el gráfico (cien
es un número razonable; se puede probar con otros números y comparar el tiempo de ejecución y la
nitidez del gráfico). Para eso hace que x varíe de xmin a xmax en incrementos de (xmax −xmin)/100, cada
vez conectando el punto anterior con el nuevo punto (x, f(x)):
For x = Xmin To Xmax Step (Xmax - Xmin) / 100
picGrfico.Line -(x, f(x)) Next
Y con eso casi terminamos, excepto por dos detalles: La pantalla debería borrarse antes de graficar. También,
en el ciclo que acabamos de ver, la primera iteración dibuja un segmento hasta (xmin, f(xmin)), pero desde
dónde? Desde el último punto anterior, que fue (xmax,0), al graficar el eje X. Eso no es correcto. Para evitarlo
podemos dar la instrucción PSet (Xmin, f(Xmin)) inmediatamente antes del ciclo.
Uniendo todas estas consideraciones llegamos a la siguiente forma de cmdGraficar_Click y Graficar:
Private Sub cmdGraficar_Click()
’ Graficar la parbola
Dim Xv As Single ’ vrtice
’ Leer los coeficientes y ver que a0
a = Val(txtA): b = Val(txtB): c = Val(txtC)
If a = 0 Then
MsgBox El Coeficiente de x^2 no puedeser 0,vbCritical,Error
txtA.SetFocus
Exit Sub
End If
’ Leer y validar los extremos del dominio
Xmin = Val(txtXmin): Xmax = Val(txtXmax)
If Xmin = Xmax Then
MsgBox El dominio no es vlido, vbCritical, Error
txtXmin.SetFocus
Exit Sub
End If
’ Vrtice Xv = -b / (2 * a)
’ Calcular Ymin = min{f(x),f(Xmin),f(Xmax)}
Ymin = f(Xmin)
If f(Xmax)  Ymin Then Ymin = f(Xmax)
If Xmin  Xv And Xv  Xmax And f(Xv)  Ymin Then Ymin = f(Xv)
’ Calcular Ymax = maxf(Xv),f(Xmin),f(Xmax)
Ymax = f(Xmin)
If f(Xmax)  Ymax Then Ymax = f(Xmax)
If Xmin  Xv And Xv  Xmax And f(Xv)  Ymax
Then Ymax = f(Xv)
’ Definir la escala del grfico
picGrfico.Scale (Xmin, Ymax)-(Xmax, Ymin)
’ Graficar la parbola
Graficar
End Sub
Revista digital Matemática, Educación e I nternet (www.cidse.itcr.ac.cr/revistamate/). Vol 1, No 2. Agosto − Diciembre 2001. 7
Private Sub Graficar
Dim x As Single
’ Graficar los ejes
picGrfico.Cls picGrfico.Line (0, Ymin)-(0, Ymax), vbBlue
picGrfico.Line (Xmin, 0)-(Xmax, 0), vbBlue
’ Graficar la funcin
picGrfico.PSet (Xmin, f(Xmin)) ’ inicio
For x = Xmin To Xmax Step (Xmax - Xmin) / 100
picGrfico.Line -(x, f(x))
Next
End Sub
Transformaciones dinámicas
Una posible mejora al proyecto recién completado consiste en añadir un mecanismo para que el usuario pueda
cambiar los valores de a, b y c y ver inmediatamente el efecto del cambio en el gráfico. Para esto podemos
poner un control UpDown al lado de cada coeficiente. El control UpDown es parte del componente “Microsoft
Windows Common Controls 2”. Para añadirlo a la caja de herramientas debe seleccionarse ese componente
en la lista que aparece al escoger la opción Componentes del menú Proyecto.
Podemos programar el control UpDown para que aumente el valor del coeficiente en un 10% de su valor
original. El 10% es una sugerencia; pueden probarse otros valores, y en especial debe resolverse el caso
particular de que el valor inicial del coeficiente sea cero.
Vayamos aclarando las ideas. Tenemos tres coeficientes y tres cuadros de texto, y estamos a punto de añadir tres
controles UpDown. Es mejor cambiar la nomenclatura y llamar los coeficientes Coef(2), Coef(1) y Coef(0)
en vez de a, b y c, respectivamente, y los cuadros de texto txtCoef(2), txtCoef(1) y txtCoef(0) en vez
de txtA, txtB, txtC. Finalmente, los controles UpDown se llamarán udCoef(2), udCoef(1) y udCoef(0).
En la Figura4 vemos el formulario rediseñado.
Ahora tendremos un arreglo Dim Coef(0 To 2) As Single para los coeficientes. Pero también, para que
cada incremento o decremento sea un 10% de los valores originales, necesitamos conservar copias de esos
8 Revista digital Matemática, Educación e Internet (www.cidse.itcr.ac.cr/revistamate/). Vol 1, No 2. Agosto − Diciembre 2001.
valores en otro arreglo, que declararemos Dim CoefOrig(0 To 2) As Single. La sección (General)
del formulario y la definición de la función f serán entonces así:
Option Explicit
’ Coeficientes de la funcin
Dim Coef(0 To 2) As Single
Dim CoefOrig(0 To 2) As Single
’ Dominio y rango del gr’afico
Dim Xmin As Single, Xmax As Single
Dim Ymin As Single,
Ymax As Single
Private Function f(x As Single) As Single
’ La funcin por graficar
f = Coef(2) * x^2 + Coef(1) * x +Coef(0)
End Function
El evento cmdGraficar_Click() cambia ligeramente, principalmente para acomodar los cambios en los
nombres de los coeficientes:
Private Sub cmdGraficar_Click()
’ Graficar la par’abola
Dim i As Byte ’ contador
Dim Xv As Single ’ v’ertice
’ Leer los coeficientes y ver que a0
For i = 0 To 2: Coef(i) = Val(txtCoef(i)): Next
If Coef(2) = 0 Then
MsgBox El coeficiente de x^2 no puede   ser 0,
vbCritical, Error
txtCoef(2).SetFocus
Exit Sub
End If
’ Guardar los valores originales
For i = 0 To 2: CoefOrig(i) = Coef(i): Next
’ Leer y validar los extremos del dominio
Xmin = Val(txtXmin): Xmax =Val(txtXmax)
If Xmin = Xmax Then
MsgBox El dominio no es v’alido, vbCritical, Error
txtXmin.SetFocus
Exit Sub
End If
’ V’ertice: xv = -b / 2a
Xv = -Coef(1) / (2* Coef(2))
’ Calcular Ymin = min{f(x),f(Xmin),f(Xmax)}
Ymin =f(Xmin)
If f(Xmax)  Ymin Then Ymin = f(Xmax) If Xmin  Xv And Xv  Xmax And f(Xv)  Ymin
Then Ymin = f(Xv)
Revista digital Matemática, Educación e I nternet (www.cidse.itcr.ac.cr/revistamate/). Vol 1, No 2. Agosto − Diciembre 2001. 9
’ Calcular Ymax = max{f(Xv),f(Xmin),f(Xmax)}
Ymax = f(Xmin)
If f(Xmax)  Ymax Then Ymax = f(Xmax) If Xmin  Xv And Xv  Xmax And f(Xv)  Ymax
Then Ymax = f(Xv)
’ Definir la escala del grfico
picGr’afico.Scale (Xmin, Ymax)-(Xmax, Ymin)
’ Graficar la par’abola
Graficar
End Sub
La subrutina Graficar se mantiene, pero para responder a los cambios que el usuario quiera hacer en los
coeficientes necesitamos programar los eventos udCoef_UpClick y udCoef_DownClick, que se dan cuando
el usuario hace click sobre la flecha arriba o la flecha abajo de cada control UpDown. En cada caso, el trabajo
es el siguiente:
1. Aumentar o disminuir el coeficiente respectivo en 10% de su valor original.
2. Reflejar el nuevo valor en el cuadro de texto.
3. Graficar la función con el nuevo coeficiente.
Vale la pena mencionar que el control UpDown tiene un mecanismo para que se le asigne un control “com-
pañero” (con la propiedad Buddy) que cambiará automáticamente cuando el usuario hace click sobre el
UpDown. Sin embargo, los cambios están restringidos a tamaños enteros, que para nuestro caso no son
suficientes. Por eso estamos programando el cambio manualmente.
Lo hacemos de esta manera:
Private Sub udCoef_UpClick(Index As Integer)
Coef(Index) = Coef(Index) + Abs(CoefOrig(Index)) / 10
txtCoef(Index).Text = Coef(Index)
Graficar
End Sub
Private Sub udCoef_DownClick(Index As Integer)
Coef(Index) = Coef(Index) - Abs(CoefOrig(Index)) / 10
txtCoef(Index).Text = Coef(Index)
Graficar
End Sub
Con eso tenemos un programa sencillo (apenas 90 líneas de código) pero muy útil para ilustrar el efecto de
cada coeficiente en el gráfico de una parábola. El usuario escribe los valores iniciales de los coeficientes y
el dominio de la función; el programa grafica la parábola con un rango apropiado, y ahora el usuario puede
modificar gradualmente los coeficientes para ver su efecto en el gráfico. Ocasionalmente, luego de varias
modificaciones, el gráfico se saldrá de su cuadro, pero con sólo hacer click sobre el botón “Graficar” el
programa ajustará el rango a los nuevos coeficientes.
Conclusión
Acabamos de ver un ejemplo de la facilidad con que se programan las aplicaciones gráficas en Visual Basic.
El lector puede fácilmente modificar este ejemplo para aplicarlo, por ejemplo, a funciones trigonométricas,
de modo que el usuario vea el efecto de los coeficientes en una función de la forma y = asen(bx + c) o
y = acos(bx + c). El caso de líneas rectas, por supuesto, es más bien una simplificación de nuestro trabajo
aquí.

Más contenido relacionado

La actualidad más candente

Clase de estimacion puntual y intervalo
Clase de estimacion puntual y intervaloClase de estimacion puntual y intervalo
Clase de estimacion puntual y intervalo
Ivan Nuñez Salinas
 
Levantamiento topografico con gps
Levantamiento topografico con gpsLevantamiento topografico con gps
Levantamiento topografico con gps
Nestor Rafael
 
Levantamiento topografico con wincha y jalones
Levantamiento topografico con wincha y jalonesLevantamiento topografico con wincha y jalones
Levantamiento topografico con wincha y jalones
Nestor Rafael
 
Curtosis
CurtosisCurtosis
Curtosis
oaca54
 

La actualidad más candente (20)

51756011 informe-de-topografia
51756011 informe-de-topografia51756011 informe-de-topografia
51756011 informe-de-topografia
 
I DIAGNOSTICO-REGIÓN HCO.pdf
I DIAGNOSTICO-REGIÓN HCO.pdfI DIAGNOSTICO-REGIÓN HCO.pdf
I DIAGNOSTICO-REGIÓN HCO.pdf
 
Clase de estimacion puntual y intervalo
Clase de estimacion puntual y intervaloClase de estimacion puntual y intervalo
Clase de estimacion puntual y intervalo
 
Asimetria y-curtosis
Asimetria y-curtosisAsimetria y-curtosis
Asimetria y-curtosis
 
4. estadística descriptiva
4.  estadística descriptiva4.  estadística descriptiva
4. estadística descriptiva
 
Levantamiento topografico con gps
Levantamiento topografico con gpsLevantamiento topografico con gps
Levantamiento topografico con gps
 
Media aritmética
Media aritméticaMedia aritmética
Media aritmética
 
Certificado como Implementador Líder ISO 9001:2015
Certificado como Implementador Líder ISO 9001:2015Certificado como Implementador Líder ISO 9001:2015
Certificado como Implementador Líder ISO 9001:2015
 
Prueba de hipotesis
Prueba de hipotesisPrueba de hipotesis
Prueba de hipotesis
 
Formulación y Evaluación Estratégica de Proyectos
Formulación y Evaluación Estratégica de ProyectosFormulación y Evaluación Estratégica de Proyectos
Formulación y Evaluación Estratégica de Proyectos
 
Análisis sísmico de una edificación de 10 niveles
Análisis sísmico de una edificación de 10 niveles Análisis sísmico de una edificación de 10 niveles
Análisis sísmico de una edificación de 10 niveles
 
1. informe tecnico ampl plazo ppto comedor
1. informe tecnico ampl plazo ppto comedor1. informe tecnico ampl plazo ppto comedor
1. informe tecnico ampl plazo ppto comedor
 
Psico. 11ava estimadores de medias y proporciones
Psico. 11ava estimadores de medias y proporcionesPsico. 11ava estimadores de medias y proporciones
Psico. 11ava estimadores de medias y proporciones
 
Sistema de gestion ambiental pozuzo
Sistema de gestion ambiental pozuzoSistema de gestion ambiental pozuzo
Sistema de gestion ambiental pozuzo
 
Diapositivas formula polinomica
Diapositivas formula polinomicaDiapositivas formula polinomica
Diapositivas formula polinomica
 
Presentación 12 prueba chi-cuadrada
Presentación 12 prueba chi-cuadradaPresentación 12 prueba chi-cuadrada
Presentación 12 prueba chi-cuadrada
 
El Muestreo
El MuestreoEl Muestreo
El Muestreo
 
Levantamiento topografico con wincha y jalones
Levantamiento topografico con wincha y jalonesLevantamiento topografico con wincha y jalones
Levantamiento topografico con wincha y jalones
 
Curtosis
CurtosisCurtosis
Curtosis
 
Analisis de costos unitarios
Analisis de costos unitariosAnalisis de costos unitarios
Analisis de costos unitarios
 

Destacado (9)

Arquitectura viviendas
Arquitectura viviendasArquitectura viviendas
Arquitectura viviendas
 
Dimensionamientos de las partes de una casa
Dimensionamientos de las partes de una casaDimensionamientos de las partes de una casa
Dimensionamientos de las partes de una casa
 
Dormitorio todas las dimensiones-2012
Dormitorio todas las dimensiones-2012Dormitorio todas las dimensiones-2012
Dormitorio todas las dimensiones-2012
 
Manual de ergonomia
Manual de ergonomiaManual de ergonomia
Manual de ergonomia
 
Relaciones funcionales en una vivienda
Relaciones funcionales en una viviendaRelaciones funcionales en una vivienda
Relaciones funcionales en una vivienda
 
Metodología Casa habitación
Metodología Casa habitaciónMetodología Casa habitación
Metodología Casa habitación
 
ZONIFICACIÓN DE UNA VIVIENDA - ARQUITECTURA - EDIFICACIÓN
ZONIFICACIÓN DE UNA VIVIENDA - ARQUITECTURA - EDIFICACIÓNZONIFICACIÓN DE UNA VIVIENDA - ARQUITECTURA - EDIFICACIÓN
ZONIFICACIÓN DE UNA VIVIENDA - ARQUITECTURA - EDIFICACIÓN
 
Analisis Arquitectonico
Analisis ArquitectonicoAnalisis Arquitectonico
Analisis Arquitectonico
 
Proceso metodológico del diseño arquitectónico
Proceso metodológico del diseño arquitectónicoProceso metodológico del diseño arquitectónico
Proceso metodológico del diseño arquitectónico
 

Similar a Graficos de Funciones en Visual Basic subido JHS

Vb Ii, Unidad Iv MéTodos Graficos
Vb Ii, Unidad Iv MéTodos GraficosVb Ii, Unidad Iv MéTodos Graficos
Vb Ii, Unidad Iv MéTodos Graficos
UTP, TA
 
Matlab 2 Capitulo 6
Matlab 2 Capitulo 6Matlab 2 Capitulo 6
Matlab 2 Capitulo 6
guest4f4d78d
 
Graficas en matlab 2 d y 3d
Graficas en matlab 2 d y 3dGraficas en matlab 2 d y 3d
Graficas en matlab 2 d y 3d
Sebastian Cuenca
 
Practicas derive 6
Practicas derive 6Practicas derive 6
Practicas derive 6
Edson Olvera
 
Gráficas en Matlab
Gráficas en MatlabGráficas en Matlab
Gráficas en Matlab
Gaby Solano
 
Tutorial de winplot
Tutorial de winplotTutorial de winplot
Tutorial de winplot
blogdevon
 
Calculo integral
Calculo integralCalculo integral
Calculo integral
jalidf
 
Metodos Graficos[Remodelacion]
Metodos Graficos[Remodelacion]Metodos Graficos[Remodelacion]
Metodos Graficos[Remodelacion]
angelikita.92
 

Similar a Graficos de Funciones en Visual Basic subido JHS (20)

LAcuna_GraficosVisualBasic.pdf
LAcuna_GraficosVisualBasic.pdfLAcuna_GraficosVisualBasic.pdf
LAcuna_GraficosVisualBasic.pdf
 
Semana 03 software libre maxima
Semana 03 software libre maximaSemana 03 software libre maxima
Semana 03 software libre maxima
 
Vb Ii, Unidad Iv MéTodos Graficos
Vb Ii, Unidad Iv MéTodos GraficosVb Ii, Unidad Iv MéTodos Graficos
Vb Ii, Unidad Iv MéTodos Graficos
 
Matlab 2 Capitulo 6
Matlab 2 Capitulo 6Matlab 2 Capitulo 6
Matlab 2 Capitulo 6
 
Graficas en matlab 2 d y 3d
Graficas en matlab 2 d y 3dGraficas en matlab 2 d y 3d
Graficas en matlab 2 d y 3d
 
Practicas derive 6
Practicas derive 6Practicas derive 6
Practicas derive 6
 
Gráficas en Matlab
Gráficas en MatlabGráficas en Matlab
Gráficas en Matlab
 
Manual winplot
Manual winplotManual winplot
Manual winplot
 
Trabajo de computacion
Trabajo de computacionTrabajo de computacion
Trabajo de computacion
 
Lab 3 de tele final
Lab 3 de tele finalLab 3 de tele final
Lab 3 de tele final
 
Desarrollo de ejercicios básicos en matlab
Desarrollo de ejercicios básicos en matlabDesarrollo de ejercicios básicos en matlab
Desarrollo de ejercicios básicos en matlab
 
Graficas en 2 d y 3d matlab
Graficas en 2 d y 3d matlabGraficas en 2 d y 3d matlab
Graficas en 2 d y 3d matlab
 
Gráficas en matlab
Gráficas en matlabGráficas en matlab
Gráficas en matlab
 
Tutorial de winplot
Tutorial de winplotTutorial de winplot
Tutorial de winplot
 
Calculo integral
Calculo integralCalculo integral
Calculo integral
 
Computadoras y mecanica de fluidos
Computadoras y mecanica de fluidosComputadoras y mecanica de fluidos
Computadoras y mecanica de fluidos
 
Metodos Graficos[Remodelacion]
Metodos Graficos[Remodelacion]Metodos Graficos[Remodelacion]
Metodos Graficos[Remodelacion]
 
Funciones parte ii
Funciones parte iiFunciones parte ii
Funciones parte ii
 
Funciones parte i
Funciones parte iFunciones parte i
Funciones parte i
 
Introduccionaautocad
IntroduccionaautocadIntroduccionaautocad
Introduccionaautocad
 

Más de johnny herrera

Introduccin a-programacin-orientada-a-objetos-oop-clases-y-objetos900
Introduccin a-programacin-orientada-a-objetos-oop-clases-y-objetos900Introduccin a-programacin-orientada-a-objetos-oop-clases-y-objetos900
Introduccin a-programacin-orientada-a-objetos-oop-clases-y-objetos900
johnny herrera
 
Desarrollo de-software-poo-2-parte
Desarrollo de-software-poo-2-parteDesarrollo de-software-poo-2-parte
Desarrollo de-software-poo-2-parte
johnny herrera
 
2983238 programacion-orientada-a-objetos
2983238 programacion-orientada-a-objetos2983238 programacion-orientada-a-objetos
2983238 programacion-orientada-a-objetos
johnny herrera
 
13 desarrollo-de-software-fundamentos-poo-1
13 desarrollo-de-software-fundamentos-poo-113 desarrollo-de-software-fundamentos-poo-1
13 desarrollo-de-software-fundamentos-poo-1
johnny herrera
 
10. programacion orientada a objetos en visual basic .net
10.  programacion orientada a objetos en visual basic .net10.  programacion orientada a objetos en visual basic .net
10. programacion orientada a objetos en visual basic .net
johnny herrera
 
Programacion Orientada a Objetos
Programacion Orientada a ObjetosProgramacion Orientada a Objetos
Programacion Orientada a Objetos
johnny herrera
 
Programacion Orientada a Objetos Luis Joyanes Aguilar
Programacion Orientada a Objetos Luis Joyanes AguilarProgramacion Orientada a Objetos Luis Joyanes Aguilar
Programacion Orientada a Objetos Luis Joyanes Aguilar
johnny herrera
 
Programacioncon Visual Basic 6
Programacioncon Visual Basic 6 Programacioncon Visual Basic 6
Programacioncon Visual Basic 6
johnny herrera
 
Practicas visualbasic60
Practicas visualbasic60Practicas visualbasic60
Practicas visualbasic60
johnny herrera
 
Matematica universitaria
Matematica universitariaMatematica universitaria
Matematica universitaria
johnny herrera
 

Más de johnny herrera (20)

Presentación de johnny herrera
Presentación de johnny herreraPresentación de johnny herrera
Presentación de johnny herrera
 
Tiristores
TiristoresTiristores
Tiristores
 
Programacion o.o.
Programacion o.o.Programacion o.o.
Programacion o.o.
 
Introduccin a-programacin-orientada-a-objetos-oop-clases-y-objetos900
Introduccin a-programacin-orientada-a-objetos-oop-clases-y-objetos900Introduccin a-programacin-orientada-a-objetos-oop-clases-y-objetos900
Introduccin a-programacin-orientada-a-objetos-oop-clases-y-objetos900
 
Desarrollo de-software-poo-2-parte
Desarrollo de-software-poo-2-parteDesarrollo de-software-poo-2-parte
Desarrollo de-software-poo-2-parte
 
METODOS Y MODELOS POO
METODOS Y MODELOS POOMETODOS Y MODELOS POO
METODOS Y MODELOS POO
 
2983238 programacion-orientada-a-objetos
2983238 programacion-orientada-a-objetos2983238 programacion-orientada-a-objetos
2983238 programacion-orientada-a-objetos
 
13 desarrollo-de-software-fundamentos-poo-1
13 desarrollo-de-software-fundamentos-poo-113 desarrollo-de-software-fundamentos-poo-1
13 desarrollo-de-software-fundamentos-poo-1
 
10. programacion orientada a objetos en visual basic .net
10.  programacion orientada a objetos en visual basic .net10.  programacion orientada a objetos en visual basic .net
10. programacion orientada a objetos en visual basic .net
 
Mapas conceptual, evolucion de la Web 1.0 hasta la Web 5.0
Mapas conceptual, evolucion de la Web 1.0 hasta la Web 5.0Mapas conceptual, evolucion de la Web 1.0 hasta la Web 5.0
Mapas conceptual, evolucion de la Web 1.0 hasta la Web 5.0
 
Programacion Orientada a Objetos
Programacion Orientada a ObjetosProgramacion Orientada a Objetos
Programacion Orientada a Objetos
 
Programacion Orientada a Objetos Luis Joyanes Aguilar
Programacion Orientada a Objetos Luis Joyanes AguilarProgramacion Orientada a Objetos Luis Joyanes Aguilar
Programacion Orientada a Objetos Luis Joyanes Aguilar
 
Programacioncon Visual Basic 6
Programacioncon Visual Basic 6 Programacioncon Visual Basic 6
Programacioncon Visual Basic 6
 
Visual Basic 6.0
Visual Basic 6.0Visual Basic 6.0
Visual Basic 6.0
 
Tutorial de Visual
Tutorial de  VisualTutorial de  Visual
Tutorial de Visual
 
Practicas visualbasic60
Practicas visualbasic60Practicas visualbasic60
Practicas visualbasic60
 
Modulo Derivadas
Modulo DerivadasModulo Derivadas
Modulo Derivadas
 
Matematica 1 usb
Matematica 1 usbMatematica 1 usb
Matematica 1 usb
 
Matematica universitaria
Matematica universitariaMatematica universitaria
Matematica universitaria
 
Matematica1 usb
Matematica1 usbMatematica1 usb
Matematica1 usb
 

Último

FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURAFORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
El Fortí
 
Proyecto de aprendizaje dia de la madre MINT.pdf
Proyecto de aprendizaje dia de la madre MINT.pdfProyecto de aprendizaje dia de la madre MINT.pdf
Proyecto de aprendizaje dia de la madre MINT.pdf
patriciaines1993
 
Concepto y definición de tipos de Datos Abstractos en c++.pptx
Concepto y definición de tipos de Datos Abstractos en c++.pptxConcepto y definición de tipos de Datos Abstractos en c++.pptx
Concepto y definición de tipos de Datos Abstractos en c++.pptx
Fernando Solis
 
Curso = Metodos Tecnicas y Modelos de Enseñanza.pdf
Curso = Metodos Tecnicas y Modelos de Enseñanza.pdfCurso = Metodos Tecnicas y Modelos de Enseñanza.pdf
Curso = Metodos Tecnicas y Modelos de Enseñanza.pdf
Francisco158360
 
PLAN DE REFUERZO ESCOLAR primaria (1).docx
PLAN DE REFUERZO ESCOLAR primaria (1).docxPLAN DE REFUERZO ESCOLAR primaria (1).docx
PLAN DE REFUERZO ESCOLAR primaria (1).docx
lupitavic
 
🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
EliaHernndez7
 

Último (20)

FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURAFORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
 
AFICHE EL MANIERISMO HISTORIA DE LA ARQUITECTURA II
AFICHE EL MANIERISMO HISTORIA DE LA ARQUITECTURA IIAFICHE EL MANIERISMO HISTORIA DE LA ARQUITECTURA II
AFICHE EL MANIERISMO HISTORIA DE LA ARQUITECTURA II
 
Proyecto de aprendizaje dia de la madre MINT.pdf
Proyecto de aprendizaje dia de la madre MINT.pdfProyecto de aprendizaje dia de la madre MINT.pdf
Proyecto de aprendizaje dia de la madre MINT.pdf
 
Concepto y definición de tipos de Datos Abstractos en c++.pptx
Concepto y definición de tipos de Datos Abstractos en c++.pptxConcepto y definición de tipos de Datos Abstractos en c++.pptx
Concepto y definición de tipos de Datos Abstractos en c++.pptx
 
2024 KIT DE HABILIDADES SOCIOEMOCIONALES.pdf
2024 KIT DE HABILIDADES SOCIOEMOCIONALES.pdf2024 KIT DE HABILIDADES SOCIOEMOCIONALES.pdf
2024 KIT DE HABILIDADES SOCIOEMOCIONALES.pdf
 
Qué es la Inteligencia artificial generativa
Qué es la Inteligencia artificial generativaQué es la Inteligencia artificial generativa
Qué es la Inteligencia artificial generativa
 
Curso = Metodos Tecnicas y Modelos de Enseñanza.pdf
Curso = Metodos Tecnicas y Modelos de Enseñanza.pdfCurso = Metodos Tecnicas y Modelos de Enseñanza.pdf
Curso = Metodos Tecnicas y Modelos de Enseñanza.pdf
 
PINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).ppt
PINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).pptPINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).ppt
PINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).ppt
 
Prueba de evaluación Geografía e Historia Comunidad de Madrid 4ºESO
Prueba de evaluación Geografía e Historia Comunidad de Madrid 4ºESOPrueba de evaluación Geografía e Historia Comunidad de Madrid 4ºESO
Prueba de evaluación Geografía e Historia Comunidad de Madrid 4ºESO
 
LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...
LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...
LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...
 
PLAN DE REFUERZO ESCOLAR primaria (1).docx
PLAN DE REFUERZO ESCOLAR primaria (1).docxPLAN DE REFUERZO ESCOLAR primaria (1).docx
PLAN DE REFUERZO ESCOLAR primaria (1).docx
 
Dinámica florecillas a María en el mes d
Dinámica florecillas a María en el mes dDinámica florecillas a María en el mes d
Dinámica florecillas a María en el mes d
 
Estrategia de prompts, primeras ideas para su construcción
Estrategia de prompts, primeras ideas para su construcciónEstrategia de prompts, primeras ideas para su construcción
Estrategia de prompts, primeras ideas para su construcción
 
ACERTIJO DE POSICIÓN DE CORREDORES EN LA OLIMPIADA. Por JAVIER SOLIS NOYOLA
ACERTIJO DE POSICIÓN DE CORREDORES EN LA OLIMPIADA. Por JAVIER SOLIS NOYOLAACERTIJO DE POSICIÓN DE CORREDORES EN LA OLIMPIADA. Por JAVIER SOLIS NOYOLA
ACERTIJO DE POSICIÓN DE CORREDORES EN LA OLIMPIADA. Por JAVIER SOLIS NOYOLA
 
🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
 
Power Point: Fe contra todo pronóstico.pptx
Power Point: Fe contra todo pronóstico.pptxPower Point: Fe contra todo pronóstico.pptx
Power Point: Fe contra todo pronóstico.pptx
 
Abril 2024 - Maestra Jardinera Ediba.pdf
Abril 2024 -  Maestra Jardinera Ediba.pdfAbril 2024 -  Maestra Jardinera Ediba.pdf
Abril 2024 - Maestra Jardinera Ediba.pdf
 
Prueba libre de Geografía para obtención título Bachillerato - 2024
Prueba libre de Geografía para obtención título Bachillerato - 2024Prueba libre de Geografía para obtención título Bachillerato - 2024
Prueba libre de Geografía para obtención título Bachillerato - 2024
 
Tema 11. Dinámica de la hidrosfera 2024
Tema 11.  Dinámica de la hidrosfera 2024Tema 11.  Dinámica de la hidrosfera 2024
Tema 11. Dinámica de la hidrosfera 2024
 
PLAN DE REFUERZO ESCOLAR MERC 2024-2.docx
PLAN DE REFUERZO ESCOLAR MERC 2024-2.docxPLAN DE REFUERZO ESCOLAR MERC 2024-2.docx
PLAN DE REFUERZO ESCOLAR MERC 2024-2.docx
 

Graficos de Funciones en Visual Basic subido JHS

  • 1. Sección Revista digital Matemática, Educación e Internet (www.cidse.itcr.ac.cr/revistamate/). Vol. 1, No 2. Agosto − Diciembre 2001. Gráficos de funciones en Visual Basic Luis Acuña P. lacuna@itcr.ac.cr Escuela de Matemática Instituto Tecnológico de Costa Rica Introducción En esta columna desarrollamos un programa en Visual Basic que permitirá al usuario graficar una función cuadrática y observar el efecto de cada uno de los coeficientes sobre el gráfico. Visual Basic es un ambiente de programación fundamentalmente gráfico. Todos los controles que se colocan en un formulario, y el texto que se escriba en ellos, se “dibuja” como gráficos en la pantalla. Muchos controles permiten que se muestren gráficos en ellos, como los botones de comando y los cuadros de imagen. Estos gráficos normalmente vienen de archivos cuyo contenido se muestra en el control. Pero los formularios y los cuadros de dibujo van más allá: estos tienen propiedades y métodos diseñados específicamente para graficar en ellos. No solamente para mostrar archivos de imágenes, sino para dibujar puntos, segmentos, curvas y otras figuras geométricas. Cuadros de dibujo Los formularios y los cuadros de dibujo (PictureBox) tienen las propiedades ScaleLeft, ScaleTop, ScaleWidth y ScaleHeight, que determinan la escala de los gráficos que contendrán. Podemos pensar en los formularios y cuadros de dibujo como ventanas a un sector rectangular de un plano coordenado. Las propiedades ScaleLeft y ScaleTop dan las coordenadas de la esquina superior izquierda del sector, y las propiedades ScaleWidth y ScaleHeight dan el ancho y el alto del sector, como se ve en el siguiente diagrama: ScaleLeft ScaleTop ScaleWidth ScaleHeight ? - - 6 ? Por omisión, los valores de ScaleLeft y ScaleTop son 0, y los de ScaleWidth y ScaleHeight son iguales a Width y Height, el tamaño del formulario o control en las unidades de medida activas (twips, pixels, cms, etc.). Pero usualmente ScaleWidth y ScaleHeight recibirán valores que dependen del sector del plano que queremos representar, independientemente del tamaño real. Por ejemplo, si en un rectángulo de 4 cm por 5 cm queremos representar el rectángulo [3,9]×[−1,8] del plano cartesiano, entonces Width y Height serán 4cm y 5cm (o su equivalente en twips, pixels, etc), pero ScaleWidth y ScaleHeight serán 6 y9. La esquina superior izquierda tiene coordenadas (ScaleLeft,ScaleTop) y la inferior derecha tiene co- ordenadas (ScaleLeft + ScaleWidth,ScaleTop + ScaleHeight). Para representar un sector del plano
  • 2. 2 Revista digital Matemática, Educación e Internet (www.cidse.itcr.ac.cr/revistamate/). Vol 1, No 2. Agosto − Diciembre 2001. cartesiano con la orientación usual (x mayores a la derecha, y mayores arriba), ScaleWidth debe ser positivo y ScaleHeight negativo. Por ejemplo, haciendo ScaleLeft = 5, ScaleTop = 20, ScaleHeight = −15 y ScaleWidth = 40 se consigue: (5,20) (45,20) (5,5) (45,5) Los valores de estas propiedades pueden asignarse durante el diseño, o durante la ejecución de dos formas: con asignaciones explícitas (ScaleLeft = 5, etc.) o con la instrucción Objeto.Scale (XIzq, YArriba) - (XDer, YAbajo) donde XIzq y XDer son los extremos izquierdo y derecho de la coordenada X, y YArriba y YAbajo son los extremos superior e inferior de la coordenadaY. Objeto es el control para el cual se define la escala; si se omite, se supone que es el formulario. Para el cuadro mostrado, la instrucción es Scale (5, 20) - (45, 5). Puntos y segmentos Para dibujar un punto en un formulario o cuadro de dibujo se usa el método PSet, con la sintaxis Objeto.PSet(x, y), color donde x y y son las coordenadas del punto, y color es el color deseado. El color es opcional; si no se indica se usa el ForeColor del objeto (como antes, si no se indica Objeto la instrucción se aplica al formulario). El siguiente ejemplo muestra cómo dibujar mil puntos aleatorios en el formulario cada vez que se hace click en él. En la Figura 1 vemos el resultado. Private Sub Form_Click() Dim i As Integer ’ contador Dim x As Single, y As Single ’ coordenadas For i = 1 To 1000 ’ dibujar 1000 puntos x = Rnd * ScaleWidth y = Rnd * ScaleHeight PSet (x, y) Next End Sub
  • 3. Revista digital Matemática, Educación e I nternet (www.cidse.itcr.ac.cr/revistamate/). Vol 1, No 2. Agosto − Diciembre 2001. 3 Para cada punto, sus coordenadas son números aleatorios entre 0 y el ancho o el alto del formulario. Esto distribuirá los puntos uniformemente si las coordenadas izquierda e inferior son ambas 0. A menos que se defina otro valor para ForeColor, los puntos serán de color negro. Si la propiedad AutoRedraw del formulario se deja en su valor inicial (falso), puede notarse que al hacer más pequeño el formulario y luego volverlo a su tamaño anterior los puntos se pierden. Puede probarse lo siguiente: Correr el programa; hacer click sobre el formulario; maximizar el formulario (los puntos anteriores se mantienen); hacer click con el formulario maximizado; minimizar el formulario; maximizarlo de nuevo. En este mo- mento se nota que los puntos que se habían dibujado la primera vez que se maximizó el formulario ya desaparecieron. En cambio, si la propiedad AutoRedraw se hace verdadera, todos los puntos se mantienen aunque el formulario cambie de tamaño. Los segmentos de recta se dibujan con el método Line, cuya sintaxis es Objeto.Line (x1, y1)-(x2, y2), color donde (x1,y1) y (x2,y2) son las coordenadas de los extremos, y el parámetro color es opcional; si no se indica se usa ForeColor Una forma de indicar un color aleatorio es con la expresión RGB(255 * Rnd(), 255 * Rnd(), 255 * Rnd()). La siguiente subrutina dibuja veinte segmentos aleatorios con color aleatorio en el formulario cada vez que se hace click en él. El resultado se muestra en la Figura 2. Private Sub Form_Click() Dim x1 As Single, y1 As Single ’ 1er punto Dim x2 As Single, y2 As Single ’ 2do punto Dim i As Byte ’ contador For i = 1 To 20 ’ dibujar 20 segmentos x1 = Rnd * ScaleWidth y1 = Rnd * ScaleHeight x2 = Rnd * ScaleWidth y2 = Rnd * ScaleHeight Line (x1, y1)-(x2, y2), _ RGB(255 * Rnd(), 255 * Rnd(), 255 * Rnd()) Next End Sub
  • 4. 4 Revista digital Matemática, Educación e Internet (www.cidse.itcr.ac.cr/revistamate/). Vol 1, No 2. Agosto − Diciembre 2001. En el método Line es posible omitir el primer punto y escribir sólo Objeto.Line -(x2, y2) En ese caso, el punto inicial es el último punto que se había dibujado. Si en el ejemplo anterior quitamos la parte (x1,y1), lo que obtenemos es una sucesión de segmentos conectados (el primer segmento empieza en (0,0)). Curvas Visual Basic no define ningún método para graficar curvas, pero la técnica usual es dibujar varios segmentos pequeños consecutivos. Vamos a desarrollar un programa que le permitirá al usuario definir la ecuación de una parábola, y le mostrará el gráfico en un cuadro de dibujo. El usuario escribe los coeficientes a, b y c en la ecuación y = ax2 +bx +c de la parábola, y también los extremos xmin y xmax del dominio. En la Figura3 vemos el resultado de este proyecto. Los cuadros de texto con los coeficientes de x2, de x y el constante, se llaman txtA, txtB y txtC. Los cuadros con los extremos del dominio se llaman txtXmin y txtXmax. El cuadro donde se graficará la función es picGrfico, y el botón de comando es cmdGraficar.
  • 5. Revista digital Matemática, Educación e I nternet (www.cidse.itcr.ac.cr/revistamate/). Vol 1, No 2. Agosto − Diciembre 2001. 5 En la ventana de código definimos la función por graficar: ’ Coeficientes de la funcin Dim a As Single, b As Single, c As Single ’ Dominio y rango del grfico Dim Xmin As Single, Xmax As Single ’ dominio Dim Ymin As Single, Ymax As Single ’ rango Private Function f(x As Single) As Single ’ La funcin por graficar f = a * x ^ 2 + b * x + c End Function Las variables a, b y c son globales porque sus valores se les asignarán en cmdGraficar_Click y se usarán en f. También Xmin, Xmax, Ymin y Ymax, los extremos del dominio y del rango, son globales porque se definirán en cmdGraficar_Click y se usarán en Graficar, como veremos más tarde. A grandes rasgos, lo que cmdGraficar_Click debe hacer es lo siguiente: 1. Leer y validar los datos (coeficientes y dominio) 2. Calcular el rango (mínimo y máximo para y) 3. Definir la escala de picGrfico 4. Llamar Graficar para graficar los ejes y la parábola. Como veremos, los preparativos tomarán mucho más trabajo que propiamente graficar la función. Para validar los datos hay dos condiciones: El valor de a no puede ser cero, y xmin debe ser estrictamente menor que xmax. Si cualquiera de esas condiciones falla, la subrutina dará un mensaje de error y retornará. Para calcular el rango necesitamos un poco de álgebra: Los puntos máximo y mínimo de una parábola restringida a un intervalo se encuentran en los extremos del intervalo (xmin o xmax) o en el vértice. El vértice tiene coordenada X igual a xv = −b/2a, pero si xv no pertenece al dominio, el máximo y el mínimo están en los extremos del intervalo. Entonces el valor máximo de y, que denotaremos ymax, es el mayor entre f(xmin), f(xmax) y f(xv) si xv ∈ [xmin,xmax], o solamente entre f(xmin) y f(xmax) si no. El cálculo de ymin es análogo. Una vez determinados el máximo y el mínimo para x y para y, la escala de picGrfico se define con la instrucción picGrfico.Scale (Xmin, Ymax)-(Xmax, Ymin) (recordemos que el método Scale necesita la esquina superior izquierda y la inferior derecha). Finalmente, cmdGraficar_Click llamará a un procedimiento Graficar. Éste usa las variables globales Xmin, Xmax, Ymin y Ymax y grafica la parábola en el rectángulo [xmin,xmax] × [ymin,ymax] del plano. Eso lo hace en dos pasos: 1. Graficar los ejes de coordenadas, para lo cual basta con dos instrucciones picGrfico.Line (0, Ymin)-(0, Ymax) picGrfico.Line (Xmin,0)-(Xmax, 0) Si alguno de los ejes no apareciera en el gráfico, la instrucción correspondiente no tiene ningún efecto visible.
  • 6. 6 Revista digital Matemática, Educación e Internet (www.cidse.itcr.ac.cr/revistamate/). Vol 1, No 2. Agosto − Diciembre 2001. 2. Graficar la función con 100 segmentos de recta entre 101 puntos consecutivos sobre el gráfico (cien es un número razonable; se puede probar con otros números y comparar el tiempo de ejecución y la nitidez del gráfico). Para eso hace que x varíe de xmin a xmax en incrementos de (xmax −xmin)/100, cada vez conectando el punto anterior con el nuevo punto (x, f(x)): For x = Xmin To Xmax Step (Xmax - Xmin) / 100 picGrfico.Line -(x, f(x)) Next Y con eso casi terminamos, excepto por dos detalles: La pantalla debería borrarse antes de graficar. También, en el ciclo que acabamos de ver, la primera iteración dibuja un segmento hasta (xmin, f(xmin)), pero desde dónde? Desde el último punto anterior, que fue (xmax,0), al graficar el eje X. Eso no es correcto. Para evitarlo podemos dar la instrucción PSet (Xmin, f(Xmin)) inmediatamente antes del ciclo. Uniendo todas estas consideraciones llegamos a la siguiente forma de cmdGraficar_Click y Graficar: Private Sub cmdGraficar_Click() ’ Graficar la parbola Dim Xv As Single ’ vrtice ’ Leer los coeficientes y ver que a0 a = Val(txtA): b = Val(txtB): c = Val(txtC) If a = 0 Then MsgBox El Coeficiente de x^2 no puedeser 0,vbCritical,Error txtA.SetFocus Exit Sub End If ’ Leer y validar los extremos del dominio Xmin = Val(txtXmin): Xmax = Val(txtXmax) If Xmin = Xmax Then MsgBox El dominio no es vlido, vbCritical, Error txtXmin.SetFocus Exit Sub End If ’ Vrtice Xv = -b / (2 * a) ’ Calcular Ymin = min{f(x),f(Xmin),f(Xmax)} Ymin = f(Xmin) If f(Xmax) Ymin Then Ymin = f(Xmax) If Xmin Xv And Xv Xmax And f(Xv) Ymin Then Ymin = f(Xv) ’ Calcular Ymax = maxf(Xv),f(Xmin),f(Xmax) Ymax = f(Xmin) If f(Xmax) Ymax Then Ymax = f(Xmax) If Xmin Xv And Xv Xmax And f(Xv) Ymax Then Ymax = f(Xv) ’ Definir la escala del grfico picGrfico.Scale (Xmin, Ymax)-(Xmax, Ymin) ’ Graficar la parbola Graficar End Sub
  • 7. Revista digital Matemática, Educación e I nternet (www.cidse.itcr.ac.cr/revistamate/). Vol 1, No 2. Agosto − Diciembre 2001. 7 Private Sub Graficar Dim x As Single ’ Graficar los ejes picGrfico.Cls picGrfico.Line (0, Ymin)-(0, Ymax), vbBlue picGrfico.Line (Xmin, 0)-(Xmax, 0), vbBlue ’ Graficar la funcin picGrfico.PSet (Xmin, f(Xmin)) ’ inicio For x = Xmin To Xmax Step (Xmax - Xmin) / 100 picGrfico.Line -(x, f(x)) Next End Sub Transformaciones dinámicas Una posible mejora al proyecto recién completado consiste en añadir un mecanismo para que el usuario pueda cambiar los valores de a, b y c y ver inmediatamente el efecto del cambio en el gráfico. Para esto podemos poner un control UpDown al lado de cada coeficiente. El control UpDown es parte del componente “Microsoft Windows Common Controls 2”. Para añadirlo a la caja de herramientas debe seleccionarse ese componente en la lista que aparece al escoger la opción Componentes del menú Proyecto. Podemos programar el control UpDown para que aumente el valor del coeficiente en un 10% de su valor original. El 10% es una sugerencia; pueden probarse otros valores, y en especial debe resolverse el caso particular de que el valor inicial del coeficiente sea cero. Vayamos aclarando las ideas. Tenemos tres coeficientes y tres cuadros de texto, y estamos a punto de añadir tres controles UpDown. Es mejor cambiar la nomenclatura y llamar los coeficientes Coef(2), Coef(1) y Coef(0) en vez de a, b y c, respectivamente, y los cuadros de texto txtCoef(2), txtCoef(1) y txtCoef(0) en vez de txtA, txtB, txtC. Finalmente, los controles UpDown se llamarán udCoef(2), udCoef(1) y udCoef(0). En la Figura4 vemos el formulario rediseñado. Ahora tendremos un arreglo Dim Coef(0 To 2) As Single para los coeficientes. Pero también, para que cada incremento o decremento sea un 10% de los valores originales, necesitamos conservar copias de esos
  • 8. 8 Revista digital Matemática, Educación e Internet (www.cidse.itcr.ac.cr/revistamate/). Vol 1, No 2. Agosto − Diciembre 2001. valores en otro arreglo, que declararemos Dim CoefOrig(0 To 2) As Single. La sección (General) del formulario y la definición de la función f serán entonces así: Option Explicit ’ Coeficientes de la funcin Dim Coef(0 To 2) As Single Dim CoefOrig(0 To 2) As Single ’ Dominio y rango del gr’afico Dim Xmin As Single, Xmax As Single Dim Ymin As Single, Ymax As Single Private Function f(x As Single) As Single ’ La funcin por graficar f = Coef(2) * x^2 + Coef(1) * x +Coef(0) End Function El evento cmdGraficar_Click() cambia ligeramente, principalmente para acomodar los cambios en los nombres de los coeficientes: Private Sub cmdGraficar_Click() ’ Graficar la par’abola Dim i As Byte ’ contador Dim Xv As Single ’ v’ertice ’ Leer los coeficientes y ver que a0 For i = 0 To 2: Coef(i) = Val(txtCoef(i)): Next If Coef(2) = 0 Then MsgBox El coeficiente de x^2 no puede ser 0, vbCritical, Error txtCoef(2).SetFocus Exit Sub End If ’ Guardar los valores originales For i = 0 To 2: CoefOrig(i) = Coef(i): Next ’ Leer y validar los extremos del dominio Xmin = Val(txtXmin): Xmax =Val(txtXmax) If Xmin = Xmax Then MsgBox El dominio no es v’alido, vbCritical, Error txtXmin.SetFocus Exit Sub End If ’ V’ertice: xv = -b / 2a Xv = -Coef(1) / (2* Coef(2)) ’ Calcular Ymin = min{f(x),f(Xmin),f(Xmax)} Ymin =f(Xmin) If f(Xmax) Ymin Then Ymin = f(Xmax) If Xmin Xv And Xv Xmax And f(Xv) Ymin Then Ymin = f(Xv)
  • 9. Revista digital Matemática, Educación e I nternet (www.cidse.itcr.ac.cr/revistamate/). Vol 1, No 2. Agosto − Diciembre 2001. 9 ’ Calcular Ymax = max{f(Xv),f(Xmin),f(Xmax)} Ymax = f(Xmin) If f(Xmax) Ymax Then Ymax = f(Xmax) If Xmin Xv And Xv Xmax And f(Xv) Ymax Then Ymax = f(Xv) ’ Definir la escala del grfico picGr’afico.Scale (Xmin, Ymax)-(Xmax, Ymin) ’ Graficar la par’abola Graficar End Sub La subrutina Graficar se mantiene, pero para responder a los cambios que el usuario quiera hacer en los coeficientes necesitamos programar los eventos udCoef_UpClick y udCoef_DownClick, que se dan cuando el usuario hace click sobre la flecha arriba o la flecha abajo de cada control UpDown. En cada caso, el trabajo es el siguiente: 1. Aumentar o disminuir el coeficiente respectivo en 10% de su valor original. 2. Reflejar el nuevo valor en el cuadro de texto. 3. Graficar la función con el nuevo coeficiente. Vale la pena mencionar que el control UpDown tiene un mecanismo para que se le asigne un control “com- pañero” (con la propiedad Buddy) que cambiará automáticamente cuando el usuario hace click sobre el UpDown. Sin embargo, los cambios están restringidos a tamaños enteros, que para nuestro caso no son suficientes. Por eso estamos programando el cambio manualmente. Lo hacemos de esta manera: Private Sub udCoef_UpClick(Index As Integer) Coef(Index) = Coef(Index) + Abs(CoefOrig(Index)) / 10 txtCoef(Index).Text = Coef(Index) Graficar End Sub Private Sub udCoef_DownClick(Index As Integer) Coef(Index) = Coef(Index) - Abs(CoefOrig(Index)) / 10 txtCoef(Index).Text = Coef(Index) Graficar End Sub Con eso tenemos un programa sencillo (apenas 90 líneas de código) pero muy útil para ilustrar el efecto de cada coeficiente en el gráfico de una parábola. El usuario escribe los valores iniciales de los coeficientes y el dominio de la función; el programa grafica la parábola con un rango apropiado, y ahora el usuario puede modificar gradualmente los coeficientes para ver su efecto en el gráfico. Ocasionalmente, luego de varias modificaciones, el gráfico se saldrá de su cuadro, pero con sólo hacer click sobre el botón “Graficar” el programa ajustará el rango a los nuevos coeficientes. Conclusión Acabamos de ver un ejemplo de la facilidad con que se programan las aplicaciones gráficas en Visual Basic. El lector puede fácilmente modificar este ejemplo para aplicarlo, por ejemplo, a funciones trigonométricas, de modo que el usuario vea el efecto de los coeficientes en una función de la forma y = asen(bx + c) o y = acos(bx + c). El caso de líneas rectas, por supuesto, es más bien una simplificación de nuestro trabajo aquí.