Principal | Gráficos 3D | Gráficos 2D | Fractales | Math | Códigos | Tutoriales | Links
Es una superficie con solo una cara, sus ecuaciones parametricas son las
siguientes.
r = 4(1 - Cos(u) / 2) x = 6 Cos(u)(1 + Sin(u)) + r Cos(u)Cos(v) si 0<= u <Pi x = 6 Cos(u)(1 + Sin(u)) + r Cos(v + Pi) si Pi< u <=2 Pi y = 16 Sin(u) + r Sin(u) Cos(v) si 0< u <= Pi y = 16 Sin(u) si Pi< u <=2 Pi z = r Sin(v) |
donde 0<=u<=2Pi y 0<=v<=2Pi
Esta imagen fue generada por klein.zip (2.435 bytes) con angulos de rotación r1=0, r2=0.9 y r3=0.9
![]() |
Option Explicit Const Pi = 3.141592654 Const Nu = 100 Const Nv = 50 Dim r1, r2, r3 As Double Dim sr1, sr2, sr3, cr1, cr2, cr3 As Double Dim x, y, z As Double Dim sx, sy As Double Dim MaxX, MaxY As Long Dim p(0 To Nu, 0 To Nv) As Punto Sub SinCos() sr1 = Sin(r1) sr2 = Sin(r2) sr3 = Sin(r3) cr1 = Cos(r1) cr2 = Cos(r2) cr3 = Cos(r3) End Sub Sub Rotacion3D() Dim xa, ya, za As Double x = (-1#) * x xa = cr1 * x - sr1 * z za = sr1 * x + cr1 * z x = cr2 * xa + sr2 * y ya = cr2 * y - sr2 * xa z = cr3 * za - sr3 * ya y = sr3 * za + cr3 * ya End Sub Sub Traslacion3D(ByVal mx As Double, ByVal my As Double, ByVal mz As Double) x = x + mx y = y + my z = z + mz End Sub Sub Perspectiva() Dim d As Double d = 1200 sx = d * x / z sy = d * y / z End Sub Sub Proyeccion() sx = sx + 0.5 * MaxX sy = sy + 0.5 * MaxY End Sub Sub Klein() Dim r, u, v As Double Dim i, j As Integer Dim escalax, escalay, escalaz As Double Picture1.Cls escalax = 3 escalay = 3 escalaz = 3 Call SinCos j = 0 v = 0 Do While (j <= Nv) i = 0 u = 0 Do While (i <= Nu) r = 4 * (1 - Cos(u) / 2) If (u < Pi) Then x = 6 * Cos(u) * (1 + Sin(u)) + r * Cos(u) * Cos(v) y = 16 * Sin(u) + r * Sin(u) * Cos(v) Else x = 6 * Cos(u) * (1 + Sin(u)) + r * Cos(v + Pi) y = 16 * Sin(u) End If z = r * Sin(v) x = escalax * x y = escalay * y z = escalaz * z Call Rotacion3D Call Traslacion3D(0, 0, -350) Call Perspectiva Call Proyeccion p(i, j).x = sx p(i, j).y = sy u = u + (2 * Pi / Nu) i = i + 1 Loop v = v + (2 * Pi / Nv) j = j + 1 Loop Call DibujarSuperficie End Sub Sub DibujarSuperficie() Dim i, j As Integer For j = 0 To Nv i = 0 Picture1.PSet (p(i, j).x, p(i, j).y), RGB(40, 40, 40) For i = 1 To Nu Picture1.Line -(p(i, j).x, p(i, j).y), RGB(40, 40, 40) Next i Next j For i = 0 To Nu j = 0 Picture1.PSet (p(i, j).x, p(i, j).y), RGB(40, 40, 40) For j = 1 To Nv Picture1.Line -(p(i, j).x, p(i, j).y), RGB(40, 40, 40) Next j Next i End Sub Private Sub Form_Load() Picture1.ScaleMode = 3 Picture1.BackColor = &HFFFFFF 'color de fondo del PictureBox MaxX = Picture1.Width MaxY = Picture1.Height End Sub Private Sub cmdEjecutar_Click() r1 = Val(Text1.Text) r2 = Val(Text2.Text) r3 = Val(Text3.Text) Call Klein End Sub Private Sub cmdSalir_Click() Unload Me End Sub |
valcoey@hotmail.com
Ramiro Alcocer, 2001
Principal | Gráficos 3D | Gráficos 2D | Fractales | Math | Códigos | Tutoriales | Links