Erhalte einen zufälligen Vektor3 in der Ebene

8

Da sind der Planet und ein paar Satelliten im 3D-Raum. Ich muss die Rotationsachse für jeden Satelliten berechnen. Sie sollten sich um das Planetenzentrum drehen.

Ich berechnete den Vektor vom Satelliten zum Zentrum des Planeten.

%Vor%

Mit vec1 und planetCenter kann ich die Gleichung der Ebene berechnen, die senkrecht auf vec1 steht.

Gleichung wie folgt:

%Vor%

Jetzt sollte ich zufällig Vektor auf dieser Ebene bekommen. Dieser Vektor wird eine Rotationsachse sein. Aber wie kann ich diesen zufälligen Vektor bekommen?

    
Yuri 25.12.2015, 09:27
quelle

3 Antworten

1

Nun, wenn du die Ebene A.x + B.y + C.z + D = 0 hast, dann ist n(A,B,C) der normale Vektor. Daher denke ich, dass der einfachste Ansatz für Ihre Aufgabe die Verwendung von Basisvektoren ist. Sie benötigen 2 senkrechte Vektoren auf dieser Ebene. Dafür können Sie Cross-Produkte nutzen. zuerst einige Definitionen:

Bekannte:

  • p Planetenmittelpunkt (oder der Mittelpunkt Ihrer Rotationen oder jeder Punkt auf der Ebene, im schlimmsten Fall können Sie p=0,0,-D/C oder eine andere Kombination ausprobieren ...)
  • n normaler Vektor
  • q= (1,0,0) or (0,1,0) wählte das mit dem kleineren |dot(n,q)|

Operationen:

  • vector = cross(a,b) = a x b - cross Produkt gibt den senkrechten Vektor an a,b zurück
  • scalar = dot(a,b) = (a . b) - Punkt Produkt gibt 0 zurück, wenn a,b lotrecht sind
  • |a| = abs(a) - abs alter Wert (sowohl Skalar als auch Vektor )
  • scalar = Rand() - float pseudozufälliger Wert im Intervall <0.0,1.0>

Unbekannte:

  • u,v - Basisvektoren
  • r - Ihr pseudozufälliger Punkt

Bekommen Sie also zuerst u,v , indem Sie das Cross-Produkt ausnutzen:

%Vor%

Und jetzt der Punkt:

%Vor%

Wenn Sie nur einen zufälligen Vektor wollen, dann ignorieren Sie die Startposition p

%Vor%

Das ist alles ... so können Sie u,v einmal (pro normaler Vektoränderung) berechnen und r so oft wie nötig generieren. Wenn u,v Einheitsvektoren sind, erzeugt dies Punkte innerhalb von 2x2 square ... wenn Sie mehr oder weniger nur Skalen hinzufügen möchten ...

Siehe Ist es möglich, eine realistische n-Körper-Sonnensystem-Simulation zu erstellen? und zufällige Bahnparameter für Keplers Gleichung statt ...

    
Spektre 31.12.2015, 09:54
quelle
0

Es scheint, dass Ihre Rotationsachse zufälliger Vektor sein könnte, der unabhängig von vec1 ist. Sie können einen Zufallseinheitsvektor mit einheitlicher Verteilung mithilfe von Methoden für Sphere Point Picking generieren.

Die Marsaglia-Methode (Gl. 9-11) ist praktisch, um diesen Vektor zu erzeugen:
Erzeuge x1 und x2 im Bereich -1..1 wie p = x1^2 +x2^2 <= 1 (schlechte Paare werden abgelehnt).
Dann

%Vor%     
MBo 25.12.2015 10:30
quelle
0

Jetzt ist deine Frage klar. Sie möchten das Objekt um ein anderes herum drehen, wie die Erde und die Sonne. Möglicherweise sind einige andere Lösungen verfügbar, aber ich würde es durch LookAt und parametrische Kreisgleichung machen.

x = r * cos(theta) + displacementX

z = r * sin(theta) + displacementZ

wo r ist Radius, Entfernung in Ihrem Fall displacementX und displacementZ sind die Entfernung vom Ursprung. Wenn beide ( displacementX und displacementZ ) 0 sind, wird es um origin (0,0)

rotieren

Im Objekt (Earth) -Skript tun Sie es wie folgt

%Vor%

Sie können weiter damit spielen

    
Hamza Hasan 25.12.2015 10:12
quelle

Tags und Links