Zufällige richtung im 3d raum?

Hey Leute.
Ich hab gerade eine kleine Denkblockade… wie bekomme ich eine zufällige richtung im 3d raum?
Finde irgendwie nichts dazu… bin ich irgendwie dumm?

in 2d ist es ja ganz easy:

alpha = randInt()
richtung.x = sin(alpha);
richtung.y = cos(alpha);

aber das ganze in 3d…?

Danke!

nutze doch dieses Verfahren um einen Vector A der Länge 1 mit z=0 zu bestimmen, (x,y,0),
damit sei eine senkrechte 2D-Ebene im 3D-Raum bestimmt, also eine Ebene aufgespannt aus Vektor A und (0,0,1)

quasi in dieser Ebene nun dasselbe Verfahren, wieder ein x2 und y2 im Kreis bestimmen,
y2 = cos ist direkt die z-Koordinate, zwischen +1 und -1,
x2 = sin wird genutzt um den Vektor A von Länge 1 herunterzudämpfen

edit:
genauer geht es mit
matlab - Python Uniform Spherical Distribution - Stack Overflow

phi = random(0,2pi)
costheta = random(-1,1)
u = random(0,1)

theta = arccos( costheta )
r = R * cuberoot( u )

now you have a (r, theta, phi) group which can be transformed to (x, y, z) in the usual way

x = r * sin( theta) * cos( phi )
y = r * sin( theta) * sin( phi )
z = r * cos( theta )

für den zweiten Winkel theta nicht ganz normal arbeiten, sondern von Zufallswert -1,1 mit arccos zurückrechnen,
wird sicher seine statistischen Gründe haben, Massenauswertung dürfte es zeigen, im Thread ja selber Thema inklusive Bild
(ist das für z berechnete cos( theta ) nicht der schon bekannte Wert costheta?)

Suche war ‚random 3d direction‘

Wie wäre es mit

x = random();
y = random();
z = random();

return new Vector(x, y, z);

// Wenn die länge eins sein soll

length = Math.sqrt(x * x + y * y + z * z);

return new Vector(x /length, y/length, z/length);

/**
* @returns a random positive or negative Number
*/
Number random();

Das ergibt keine Gleichverteilung der Vektoren. Wenn man das ganze in Kugelkoordinaten macht, funktioniert es besser (das geht in die Richtung, die @SlaterB in der zweiten Hälfte seines Beitrages beschrieben hat).
Wenn man zwei Werte beliebig aus den Intervallen [tex] heta \in \left[0,,\pi\right][/tex] sowie [tex]\varphi \in \left[0,,2\pi\right[[/tex] wählt, kommt das schon ganz gut hin. Nicht perfekt, weil die Wahrscheinlichkeit für den „Nord-“ und „Südpol“ der Kugel höher ist (sobald der erste Wert genau 0 oder genau pi ist, spielt der zweite keine Rolle mehr. Es kann sogar sein, dass das wahrscheinlichkeitstheoretisch vernachlässigbar ist, weil das ein infinitesimal kleiner Wertebereich ist). Den Radius setzt man sinnvollerweise fix auf 1.

*** Edit ***

Ach so, um das dann noch in kartesische Koordinaten umzurechnen, verwendet man dann diese Formel (siehe Wikipedia):
[tex]x = sin heta cos \varphi[/tex]
[tex]y = sin heta sin \varphi[/tex]
[tex]z = cos heta[/tex]