2009-06-09 36 views
23

De modo que, proveniente de un fondo de flash, entiendo bien algunos trigonométricos 2D simples. En 2d con I círculo, sé la matemática para colocar un elemento en el borde dado el uso de un ángulo y un radio.Trazar un punto en el borde de una esfera

x = cos(a) * r; 
y = sin(a) * r; 

Ahora bien, si tengo un punto en el espacio 3D, sé que el radio de mi esfera, sé el ángulo quiero posicionarlo alrededor del eje Z y el ángulo i desea colocar alrededor de, digamos, el eje y ¿Cuál es la matemática para encontrar las coordenadas x, y y z en mi espacio 3d (suponiendo que mi origen es 0,0,0)? Pensaría que podría tomar prestada la Matemática del círculo trigonométrico pero no puedo encontrar una solución.

Respuesta

58

Su posición en 3d está dado por dos ángulos (+ radio, que en su caso es constante)

x = r * cos(s) * sin(t) 
y = r * sin(s) * sin(t) 
z = r * cos(t) 

aquí, s es el ángulo alrededor del eje z, y t es el ángulo altura, medido 'hacia abajo' desde el eje z.

El cuadro siguiente muestra lo que los ángulos representan, s = theta en el * PI rango de 0 a 2 en el plano xy, y t = phi en el rango de 0 a PI.

enter image description here

+5

No olvide que '' s' y t' necesita estar en radianes, * no * grados. Para convertir a radianes: 'radianes = angleInDegrees * Math.PI/180'. – Sam

+0

Si s = 45deg yt = 0deg, entonces (x, y, z) = (0,0,1). Pero cuando lo mapeamos, obtendríamos (0, 0.707, 0.707) ¿verdad? x e y siempre dan cero cuando t es cero yz es independiente de s ...! ¿Qué debo hacer para hacerlo bien? –

+0

¿No deberíamos poder barrer exactamente un círculo con t bloqueado a 0 y variando s? Aquí, no funciona así, cuando t es cero, independientemente del valor de s, (x, y, z) es siempre (0,0,1) –

Cuestiones relacionadas