Körper auf Punkte einer Kugel drehen (gleichverteilt)

Neue Frage »

Gegl2 Auf diesen Beitrag antworten »
RE: Körper auf Punkte einer Kugel drehen (gleichverteilt)
Meine Frage:
Hallo!
Ich habe ein Geometrisches Problem das ich seit Wochen nicht hin bekomme und brauche Hilfe bei den Grundlagen, denke ich.

Ich möchte einen Quader gleichmäßig im Raum drehen um alle möglichen Projektionen auf 2-D zu erhalten.


Meine Ideen:
Mein Ansatz:

8 Punkte/ Vektoren beschreiben den Quader.
Der Ursprung ist im Schwerpunkt.

Mit Hilfe von Rotationsmatritzen kann ich die Punkte durch eine Matrix-Multiplikation um XYZ - Achsen drehen.

Was mir jetzt schwer fällt ist die Wahl der Winkel, sodass ich eine Gleichverteilung der Projektionen erhalte. -> Also keine Häufung um einen Pol wie bei gleichverteilung der Winkel auf einer Kugel.

Es gibt ein paar Erklärungen zur zufälligen Gleichverteilung von Punkten in Kugelkoordinaten.
Was ich brauche sind aber die Winkel für die Matritzen, die ja Andere sind. Desweiteren möchte ich die Rotationen abrastern und keine Zufallszahlen generieren.

Bin für jede Hilfe dankbar!

Ich habe auch einen Python Code dazu um das ganze zu veranschaulichen, wenn es jemandem nützt

Zwei Beiträge zusammengefasst, damit es nicht so aussieht, als ob schon jemand antwortet. Steffen
Huggy Auf diesen Beitrag antworten »
RE: Körper auf Punkte einer Kugel drehen (gleichverteilt)
Zitat:
Original von Gegl2
Was mir jetzt schwer fällt ist die Wahl der Winkel, sodass ich eine Gleichverteilung der Projektionen erhalte. -> Also keine Häufung um einen Pol wie bei gleichverteilung der Winkel auf einer Kugel.

Wenn man übliche Kugelkoordinaten verwendet mit den Winkeln , bekommt man eine Gleichverteilung von Punkten auf der Kugeloberfläche, wenn man für eine Gleichverteilung auf dem Definitionsintervall ansetzt und für eine Verteilung mit der Dichtefunktion



auf dem Definitionsintervall.

Zitat:
Was ich brauche sind aber die Winkel für die Matritzen, die ja Andere sind.

Wieso?
Definiert man z. B. die Richtung vom Mittelpunkt des Quaders parallel zu seiner längsten Seite als die Richtung des Quaders und lässt diese Richtung in der Ausgangslage des Quaders in Richtung der positiven z-Achse zeigen, kann man obige Winkel als Winkel für die Drehmatrizen benutzen. Man dreht zunächst mit dem Winkel um die y-Achse und dann mit dem Winkel um die z-Achse. Jetzt zeigt die Richtung des Quaders in die -Richtung.

Allerdings hat man damit noch nicht alle Konfiguration des Quaders. Der kann ja noch um seine Richtungsachse gedreht werden. Das erledigt am einfachsten in der Ausgangslage durch eine Drehung um einen Winkel um die z-Achse. Das lässt die Richtung des Quaders unverändert, ändert aber die Position der Quaderecken. Dieser Winkel ist wieder gleichverteilt auf seinem Definitionsintervall zu wählen. Nach dieser Drehung folgen die beiden vorher genannten Drehungen.

Zitat:
Desweiteren möchte ich die Rotationen abrastern und keine Zufallszahlen generieren.

Die Gleichverteilungen abzurastern, dürfte kein Problem sein. Um den Winkel
abzurastern, invertiert man die Verteilungsfunktion





Das heißt, man rastert auf dem Intervall ab, und berechnet daraus gemäß der letzten Gleichung .
Gegl Auf diesen Beitrag antworten »
RE: Körper auf Punkte einer Kugel drehen (gleichverteilt)
Danke für deine Antwort!
Langsam komme ich voran smile


Alles ist mir aber noch nicht klar...


Wenn ich deine Lösung übernehme erhalte ich einen oben offenen Becher, anstatt einer Kugel.
Liegt vielleicht daran, dass die Punkte ja irgendwo im Raum liegen und somit nicht bei theta=0
starten. Somit kann ich auch nicht einfach einen Winkel um den gedreht wird über den arccos() verteilen. Hängt ja davon ab wo im Raum ich schon bin.

Bin mittlerweile der Meinung, dass eine Gleichverteilung von allen 3 Winkeln von 0-2pi
doch die Richtige Lösung ergibt.
Bin mir aber nicht sicher - klingt das für jemanden logisch?

Bitte helft mir noch ein bisschen weiter verwirrt

Hier der versprochene Python - Code:
(Darf keine URL posten, deswegen bitte selbst eingeben:
"Pastebin"+"."+"com"+"/"+"WcFx01DS")
Huggy Auf diesen Beitrag antworten »
RE: Körper auf Punkte einer Kugel drehen (gleichverteilt)
Zitat:
Original von Gegl
Wenn ich deine Lösung übernehme erhalte ich einen oben offenen Becher, anstatt einer Kugel.

Die Bemerkung verstehe ich nicht. Natürlich bekommst du eine Kugel.

Zitat:
Liegt vielleicht daran, dass die Punkte ja irgendwo im Raum liegen und somit nicht bei theta=0 starten.

Das ändert doch nichts an Drehungen. Die werden auf jeden beliebigen Punkt angewendet.

Zitat:
Somit kann ich auch nicht einfach einen Winkel um den gedreht wird über den arccos() verteilen. Hängt ja davon ab wo im Raum ich schon bin.

Doch, das kannst du. Du scheinst nicht zu verstehen, dass der Quader so als starrer Körper gedreht wird.

Zitat:
Bin mittlerweile der Meinung, dass eine Gleichverteilung von allen 3 Winkeln von 0-2pidoch die Richtige Lösung ergibt.

Falsch!
Gegl Auf diesen Beitrag antworten »
RE: Körper auf Punkte einer Kugel drehen (gleichverteilt)
Ich sehe, dass irgendwo ein Fehler sein muss, kann ihn aber nicht finden unglücklich

Mit dem "Becher" ist folgendes gemeint
Hier die Auszüge aus dem Programm und das Ergebnis:

* Rotationswinkel um Z-Achse:
thetaZ = np.linspace(0,2*np.pi,nrPointsZ, endpoint=False)
-> Also von 0 bis 2pi, ohne die 2pi, linear verteilt eine bestimmte Anzahl an Punkten

* Rotationswinkel um Y-Achse:
cosTY = np.linspace(0,1,nrPointsY, endpoint=True)
thetaY = np.arccos(1-2*cosTY)
-> Linear verteilte zahlen von 0-1, davon den arccos

* Der Vektor den ich drehe und zeichne:
(x=4, y=2, z=1)

[attach]49362[/attach]

Irgendwas hab ich da wirklich nicht verstanden...
Bitte um Hilfe

PS: Der Link zum Code
https://pastebin.com/WcFx01DS
Huggy Auf diesen Beitrag antworten »
RE: Körper auf Punkte einer Kugel drehen (gleichverteilt)
Mir ist nicht so ganz klar, was deine Bilder zeigen. Der Pythoncode sagt mir nichts, da ich Python nicht kenne.

Aber durch die 3 Drehungen kann jeder beliebige Ausgangspunkt mit Abstand zum Nullpunkt jeden beliebigen anderen Punkt auf der Oberfläche einer Kugel mit Radius erreichen. Der Ausgangspunkt habe die Winkelkoordinaten und er soll auf die Koordinaten kommen. Das wird erreicht durch eine Drehung um die z-Achse mit Winkel bzw. . Jetzt befindet sich der Punkt in der x-z-Ebene. Eine Drehung um die y-Achse mit dem Winkel bringt ihn auf den Winkel . Eine Drehung um die z-Achse mit dem Winkel bringt ihn dann auf die Zielposition. Wenn man nun die Winkel abrastert, wird eine Kombination der Rasterwinkel in der Nähe der genannten Drehwinkel liegen. Wie gut, das hängt von der Feinheit der Rasterung ab.

Versuch das mal an Beispielen nachzuvollziehen. Vielleicht löst sich dadurch dein Problem.
 
 
Neue Frage »
Antworten »



Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »