Trazando un punto en el borde de una esfera

De modo que, desde 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.

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

Ahora bien, si tengo un punto en el espacio 3D, conozco el radio de mi esfera, conozco el ángulo en el que quiero ubicarlo alrededor del eje zy el ángulo en el que quiero ubicarlo, por ejemplo, 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.

Su posición en 3d está dada por dos angularjs (+ 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 de altura , medido ‘hacia abajo’ desde el eje z.

La siguiente imagen muestra lo que representan los angularjs, s = theta en el rango de 0 a 2 * PI en el plano xy, y t = phi en el rango de 0 a PI.

enter image description here

La respuesta aceptada no pareció respaldar los valores x negativos (posiblemente hice algo incorrecto), pero por las dudas, usando la notación de la convención ISO sobre los sistemas de coordenadas definidos en esta entrada de Wikipedia , este sistema de ecuaciones debería funcionar:

 import math x = radius * sin(theta) * cos(phi) y = radius * sin(theta) * sin(phi) z = radius * cos(theta) radius = math.sqrt(math.pow(x, 2) + math.pow(y, 2) + math.pow(z, 2)) phi = math.atan2(y, x) theta = math.acos((z / radius))