BEARBEITET, um Winkelberechnungen einzuschließen.
Da Sie in Ihrer Frage keinen echten Code angeben, gebe ich nur einen Algorithmus und Winkel an. Wenn Sie Ihre Frage mit Code verbessern, kann ich meinen eigenen Code hinzufügen.
Um zu klären, müssen wir Länge AC
gleich Länge BC
haben, und der Mittelpunkt der Seite AB
muss der Ursprung sein. Letzteres bedeutet, dass die Koordinaten der Punkte A
und B
einander negativ sind. (Eigentlich sind die wirklichen Anforderungen, dass der Vektor OC
wo O
ist der Ursprung senkrecht zum Vektor AB
und Ursprung ist in Zeile AB
. Ihre Bedingungen strenger sind als diese.)
Lassen Sie uns sagen, dass an jedem Punkt der Koordinaten von A
sind (Ax, Ay, Az)
und ähnlich für B
und C
.
Bewegen Sie zuerst den Punkt A
in die xy-Ebene. Tun Sie dies mit einer Drehung aller drei Punkte um die x-Achse. Aufgrund der Bedingungen befindet sich der Punkt B
ebenfalls in der xy-Ebene. Ein möglicher Winkel der Rotation ist -atan2(Az, Ay)
obwohl andere auch möglich sind. Überprüfen Sie, ob die resultierenden Werte Az
und Bz
in Fließkomma-Genauigkeit Null oder nahe beieinander liegen.
Zweitens, führen Sie eine Drehung um die z-Achse durch, um den Punkt A
zur x-Achse zu bewegen (und die anderen Punkte entsprechend). Der Punkt B
wird nun auch auf der x-Achse angezeigt. Ein Drehwinkel hierfür ist -atan2(Ay, Ax)
. Überprüfen Sie die resultierenden Ay
und By
.
Drittens und letzten, führen Sie eine Drehung um die x-Achse durch, um Punkt C auf die y-Achse zu verschieben. Die Punkte A
und B
sind von dieser letzten Drehung nicht betroffen.Ein Drehwinkel hierfür ist -atan2(Cz, Cy)
. Überprüfen Sie das Ergebnis Cx
(das vor dieser letzten Drehung Null sein sollte) und Cz
.
Ihr Dreieck befindet sich jetzt in der gewünschten Position, sofern Ihr ursprüngliches Dreieck die Bedingungen tatsächlich erfüllt. Beachten Sie, dass dieser Algorithmus keine Drehung um die y-Achse verwendet hat: Er wurde nicht benötigt, obwohl Sie meine ursprüngliche Drehung um x durch eine um y ersetzen könnten, wenn Sie möchten.
Bitte geben Sie weitere Details, wie Beispiel Eingänge und gewünschte Ausgänge. Auch, was bedeuten "Medianpunkt von A und B" und "in Achsenherkunft"? (Ein Median ist kein Punkt: meinst du mittleren Punkt? Und ist dieser Mittelpunkt garantiert am Ursprung?) Woher weißt du, dass es möglich ist, zu tun, was du willst? (Es scheint mir im Allgemeinen nicht möglich zu sein, ohne weitere Operationen oder Einschränkungen für T. Für Letzteres muss der Ursprung der Fuß der Höhe von Punkt C zu Seite AB sein.) Welche Arbeit haben Sie bisher geleistet? und welchen Code hast du ausprobiert? –
Entschuldigung, ich meinte wirklich Mittelpunkt. Und mit Achsen Ursprung meine ich das Zentrum der Achsen, (0,0,0) AB Mittelpunkt ist sicherlich in (0,0,0) – user1941583
Wenn Sie Midpoint dann was Sie fragen ist nur möglich, wenn Seitenlänge AC gleich Seite Länge BC - dh AB ist die Basis eines gleichschenkligen Dreiecks. Es kann nur dann mit Drehungen um die Hauptachsen arbeiten, wenn der Ursprung der Fuß der Höhe von C nach AB ist - d.h. nur wenn der Vektor von A nach B senkrecht zum Vektor vom Ursprung nach C ist. Dies ist wahr, weil alle deine Rotationen den Ursprung an Ort und Stelle belassen, und am gewünschten Ende wird die von mir angegebene Situation wahr sein. Wenn Sie die Bedingung ändern, kann ich Ihnen eine Antwort geben, aber keine Antwort ist jetzt möglich. –