2009-06-09 10 views
23

So von einem Flash-Hintergrund kommend, habe ich ein OK Verständnis für einige einfache 2D-Trigger. In 2d mit I circle, ich kenne die Mathematik, um einen Gegenstand an die Kante gegeben einen Winkel und einen Radius mit.Einen Punkt auf den Rand einer Kugel zeichnen

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

Nun, wenn ich einen Punkt im 3D-Raum haben, weiß ich den Radius meiner Sphäre, ich kenne den Winkel i es um die z-Achse positionieren wollen und der Winkel ich will es positionieren um, sagen wir, die y-Achse. Was ist die Mathematik, um die x-, y- und z-Koordinaten in meinem 3D-Raum zu finden (angenommen, dass mein Ursprung 0,0,0 ist)? Ich würde denken, ich könnte die Mathematik aus dem Kreis trig, aber ich kann nicht scheinen, eine Lösung zu finden.

Antwort

58

in 3d Ihre Position durch zwei Winkel (+ Radius, der im Fall konstant ist) gegeben ist

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

hier s ist der Winkel um die z-Achse und t ist der Höhe Winkel, von der z-Achse 'nach unten' gemessen.

Das untere Bild zeigt, was die Winkel darstellen, s = Theta im Bereich von 0 bis 2 * PI in der xy-Ebene, und t = phi im Bereich von 0 bis PI.

enter image description here

+5

Vergessen Sie nicht, dass 'S' und 't' in Radiant sein müssen, * nicht * Grad. Um zu Radiant zu konvertieren: 'radians = angleInDegrees * Math.PI/180'. – Sam

+0

Wenn s = 45 deg und t = 0 deg, dann (x, y, z) = (0,0,1). Aber wenn wir es tatsächlich abbilden, würden wir (0, 0,707, 0,707) richtig bekommen? x und y geben immer null, wenn t null ist und z ist unabhängig von s ...! Was soll ich tun, um es richtig zu machen? –

+0

Sollen wir nicht genau einen Kreis mit t auf 0 und variierende s gesperrt werden? Hier funktioniert es nicht, wenn t gleich Null ist, unabhängig vom Wert von s, (x, y, z) ist immer (0,0,1) –