Programación General > Visual Basic para principiantes
Grafico Parametrico en PictureBox
IAO:
Holaaaa:
Señores...
De nuevo una pregunta, espero no rebuznar....
Tengo casi listo lo de un gráfico parametrico en el picturebox. Pero me lanza un error y me
gustaría saber si gustan lanzarme una mano.
--- Código: Text --- Option Explicit Const PI = 3.14159265Dim x As SingleDim y As SingleDim r As SingleDim t As SingleDim dt As Single Dim i As IntegerDim a(12) As SingleDim b(12) As Single Private Sub Command1_Click() '''Draw the parametric curve. t = 0: x = 0: y = 0 dt = PI / 100 picGraph.CurrentX = 0 picGraph.CurrentY = 0 Do While t <= 2 * PI '''Pienso que indica los 360 grados del circulo. r = 0.5 '2 * Sin(5 * t) '''Pienso que indica el radio del circulo '''Circulo 'x = r * Cos(t) 'y = r * Sin(t) Ploting Loop picGraph.Line -(0, 0), vbRed End Sub Private Sub Form_Load() '''Set a convenient scale. picGraph.AutoRedraw = True picGraph.Scale (-2.02, 2.02)-(2.02, -2.02) '''-------------------------------------------------------------------------------- '''Draw axes. Dibuja los Ejes en Azul. picGraph.Line (-2, 0)-(2, 0), vbBlue '''Eje X en Azul For x = -2 To 2 Step 0.5 picGraph.Line (x, -0.1)-(x, 0.1), vbBlue '''Secciones del Eje X Next x picGraph.Line (0, -2)-(0, 2), vbBlue '''Eje Y en Azul For y = -2 To 2 Step 0.5 picGraph.Line (-0.1, y)-(0.1, y), vbBlue '''Secciones del Eje Y Next y'''-------------------------------------------------------------------------------- '''Toma los Valores del List For i = 0 To List1.ListCount - 1 List1.ListIndex = i a(i) = CSng(List1.Text) Next i For i = 0 To List2.ListCount - 1 List2.ListIndex = i b(i) = CSng(List2.Text) Next iEnd Sub Private Sub Ploting() For i = 0 To 11 'UBound(a) x = a(i * t) / 5 '''<-------------SubIndice fuera del intervalo Next i Label1 = a(8) '''Only Probe. It's Ok. For i = 0 To 11 'UBound(b) y = b(i * t) / 5 '- t Next i Label2 = b(8) '''Only Probe. It's Ok. picGraph.Line -(x, y), vbRed t = t + dtEnd Sub
Aquí me dice:
x = a(i * t) / 5 '''<-------------SubIndice fuera del intervalo
Sé que es por la t, pero demen una orientación de como mantenerla allí, porque es lo mejor que he podido
obtener al intentar graficar esos datos que estan en los listbox.
Les pego el programa, no es mio totalmente. Le hice varias modificaciones.
De antemano muchas gracias...Espero haber sido claro y solicitar la ayuda correctamente.
Por favor sino comprenden algo haganme saber y trataré de reordenar la pregunta.
Bye('_')......
m0skit0:
Hola de nuevo IAO
Lo has explicado perfectamente :good:
Cuando te da el error en VB6 y seleccionas "Depurar", puedes ver que te marca la línea del error. Posando el cursor sobre las variables puedes comprobar que t=1,16239, que si lo multiplas por i=11 te da 12,78629, que efectivamente, está fuera del rango del vector a.
Salud
Nebire:
--- Cita de: "IAO" ---...me lanza un error...
Aquí me dice: x = a(i * t) / 5 '''<-------------SubIndice fuera del intervalo
Sé que es por la t, pero demen una orientación de como mantenerla allí, porque es lo mejor que he podido
obtener al intentar graficar esos datos que estan en los listbox.
De antemano muchas gracias...Espero haber sido claro y solicitar la ayuda correctamente.
Por favor sino comprenden algo haganme saber y trataré de reordenar la pregunta.
--- Fin de la cita ---
Efectivamente como te dice mosquito, lo cual es obvio...
(i*t) refiere al indice, puesto que la matriz sólo tiene 12 elementos (del 0 al 11) , se desborda el límite. La razón de que desborde es que 't' se va incrementando a través de 'dt' que es 1/100 de Pi, dado que i se refiere al ciclo del bucle que recorre cada índice de la matriz, es lófico que cuando t alcance un valor determinado al multiplicalo por 11 8primero y luego les iría pasando a los indices menores) superan el valor de 11.
Yo lo he solucionado de la siguiente manera, pero ignoro si vale a tus propósitos porque eres parco en explicaciones, es más útil definir que tratas de hacer, no siendo el caso uno está atado de manos...
--- Código: Visual Basic --- Option Explicit Const PI = 3.14159265Const dt = PI / 100 Dim i As Integer Dim a(12) As SingleDim b(12) As Single Private Sub Command1_Click() Dim t As Single picGraph.CurrentX = 0 picGraph.CurrentY = 0 Do While t <= 2 * PI t = Ploting(t) Loop picGraph.Line -(0, 0), vbRed End Sub Private Sub Form_Load() Dim x As Single, y As Single picGraph.AutoRedraw = True picGraph.Scale (-2.02, 2.02)-(2.02, -2.02) Me.Show picGraph.Line (-2, 0)-(2, 0), vbBlue For x = -2 To 2 Step 0.5 picGraph.Line (x, -0.1)-(x, 0.1), vbBlue Next x picGraph.Line (0, -2)-(0, 2), vbBlue For y = -2 To 2 Step 0.5 picGraph.Line (-0.1, y)-(0.1, y), vbBlue Next y ' Toma los Valores del List For i = 0 To List1.ListCount - 1 a(i) = CSng(List1.List(i)) Next i For i = 0 To List2.ListCount - 1 b(i) = CSng(List2.List(i)) Next i End Sub Private Function Ploting(ByVal t As Single) As Single Dim x As Single, y As Single Dim ix As Single For i = 0 To 11 ix = i * t If ix > 11 Then ix = 11 x = a(ix) / 5 Next i Label1 = a(8) For i = 0 To 11 ix = i * t If ix > 11 Then ix = 11 y = b(ix) / 5 Next i Label2 = b(8) picGraph.Line -(x, y), vbRed t = t + dt Ploting = tEnd Function
m0skit0:
--- Cita de: "Nebire" ---Yo lo he solucionado de la siguiente manera,
--- Fin de la cita ---
Personalmente creo que es mejor que lo solucione él mismo.
Un saludo, Nebire
IAO:
Holaaaa:
Gracias sr. m0skit0 por su explicación trate de colocar -1 y -2 para reducir el tamaño del indice,
pero me daba error igual. De verdad estaba complicado, pienso que hubiera tardado mucho en
descubrir como hacerlo. Pero su explicación estuvo excelente.
Bueno sr. Nebire, más que ayuda, usted me dió un empujón. De verdad, copie y pegué el código,
me funcionó perfecto. Gracias por 1Millón^1Millónx1000^Gracias.
Le aseguro, que voy a estudiar bien detalladamente su propuesta antes de proseguir. Y trataré de
entender que estaba haciendo mal. En excel, me lo dibuja una tanto diferente, pero es cuestión
de ajustes.
No pasaré al siguiente proceso, sin haber comprendido bien todo este aporte. Para mi, es muy
valioso. Es como un tesoro, llevo casi un año recopilando por aquí por allá, porque no terminaba
de entender como I/V o corriente versus voltaje, operaba matematicamente dentro del osciloscopio.
No tiene idea de todo lo que he leido. Anoche soñe toda la noche con señales senoidales, la pasé
requete mal.
Nuevamente: Gracias por 1Millón^1Millónx1000^Gracias. :)
No tengo palabras para tanto agradecimiento. Le juro que lo estudiaré al milimetro.
Bye('_')....
Navegación
[#] Página Siguiente
Ir a la versión completa