La Web del Programador: Comunidad de Programadores
 
    Pregunta:  2842 - GRAFICOS 3D
Autor:  Edwin Pineda C
Quiero aprender a hacer graficos tridimensionales, empezando por construir el plano cartesiano con coordenadas x, y, z, quiero realizar graficas o matrices, tambien quiero rotar el plano con la grafica, es decir quiero aprender a programar en esta parte desde visual, sin necesidad de controles complicados, quiero programarlo

gracias

  Respuesta:  Julio Antonio Farfan Rondón
Mira hacer gráficos en 3d con vb es sencillo, sólo tienes que crear (con un poco de imaginación) a partir del plano x,y tu propio espacio en 3d (x,y,z).
Para eso trabaja con las siguientes ecuaciones:
x=x
y=y
z=f(x,y)
a=i+j
b=(i-j)*m
c=z+b
i=+-sqr(x^2/2)
j=+-sqr(y^2/2)
Ahora abre un picturebox y dos botones (ejecutar y salir)
El código es:

Private Function z(x, y)
z = -0.1 * (x ^ 2 + Sin(y))
End Function

Private Sub Command1_Click()
Picture1.Scale (-10, 10)-(10, -10)
m = 0.25 'pendiente
d = 0.5 'separación de lineas
For t = -6 To 6 Step d
For u = -6 To 6 Step d
x = t
y = u
X1 = t + d
Y1 = u + d
If x >= 0 Then i = -Sqr(x ^ 2 / 2)
If x <= 0 Then i = Sqr(x ^ 2 / 2)
If y >= 0 Then j = Sqr(y ^ 2 / 2)
If y <= 0 Then j = -Sqr(y ^ 2 / 2)
If X1 >= 0 Then i1 = -Sqr(X1 ^ 2 / 2)
If X1 <= 0 Then i1 = Sqr(X1 ^ 2 / 2)
If Y1 >= 0 Then j1 = Sqr(Y1 ^ 2 / 2)
If Y1 <= 0 Then j1 = -Sqr(Y1 ^ 2 / 2)
a = i + j
a1 = i1 + j
a2 = i + j1
b = (i - j) * m
b1 = (i1 - j) * m
b2 = (i - j1) * m
c = z(x, y) + b
c1 = z(X1, y) + b1
c2 = z(x, Y1) + b2
If t <= 6 - d Then Picture1.Line (a, c)-(a1, c1)
If u <= 6 - d Then Picture1.Line (a, c)-(a2, c2)
Next u
Next t
End Sub

P.D. si te ha servido, responde, también puedes hacer que la figura rote, gire, etc, y hacer cualquier tipo de gráfico (coordenadas cilindricas, esféricas, etc). Yo soy un autodidacta, si sabes como puedo reducir el código (utilizando arrays) avisame.

  Respuesta:  Roberto Morales
Para este tipo de graficos 3d te puedo recomendar que aprendas a utilizar DirectX dentro de visual basic, pero programar en DirectX no es tan facil ya que se trata de un lenguaje de bajo nivel que se comunica directamente con la tarjeta gráfica para hacer de manera rápida todos los procesos 3d inclusive te permite hacer Render(o representaciones),programando en direct X puedes llegar inclusive a hacer juegos en 3d.O bien puedes hacerlo desde Pascal o lenguaje ensamblador, ya que el codigo es mucho mas rapido.

Puedes utilizar esta formula para representar puntos en la pantalla
A(x,y)-Suponiendo que a es un punto en la pantalla, el secreto esta en la distancia,
es decir dar la apariencia de que un punto esta lejos o bien un punto esta cerca, para esto vamos a suponer el ojo a una distancia a(a minúscula), la formula para la ordenada y abcisa seria:
x=(a.y)/z
y=(a.x)/z

a- es la distacia de el ojo hasta la pantalla o monitor
z- es la distancia a la que esta el punto de la pantalla hasta el fondo de la pantalla en el plano virtual z.

Para la rotacion del eje x utiliza esta fórmula:
x´=x
y´=y*cos(a)-z*sin(a)
z´=y*sin(a)+z*cos(a)
Matriz
1 0 0
0 cos(a) -sin(a)
0 sin(a) cos(a)


Para rotación del eje y:
x´=x*cos(a)+z*sin(a)
y´=y
z´=-x*sin(z)+z*cos(a)

Matriz
cos(a) 0 sin(a)
0 1 0
-sin(a) 0 cos(a)


Para rotación del eje z:

x´=x*cos(z)-y*sin(a)
y´=x*sin(a)+y*cos(a)
z´=z

Matriz
cos(a) -sin(a) 0
sin(a) cos(a) 0
0 0 1