Mein Hintergrund:
Ich habe ein oder zwei Einführungskurse in Lineare Algebra an der Universität belegt, aber das ist ein paar Jahre her und ich habe es seitdem nicht mehr praktiziert. Meine Terminologie mag falsch sein, aber ich glaube, mein Text sollte klar genug sein, damit jeder ihn versteht.
Problem:
Ich versuche, einen dreidimensionalen Controller für ein Spiel zu bauen, und bin auf ein Problem gestoßen, das ich nicht lösen kann. Ich muss einen dreidimensionalen Richtungsvektor finden, um ein Objekt entlang einer Ebene parallel zur Ebene zu bewegen. Der Richtungsvektor sollte auf einem 2-dimensionalen Eingabevektor entlang der x- und z-Achse in Kombination mit der Drehung (irgendeiner/aller drei Achsen) der Ebene basieren.
Ich denke, der einfachste Weg für mich, das zu lösende Problem zu erklären, besteht darin, zu versuchen, es anhand von zwei Beispielen zu veranschaulichen.
Annahmen:
Linkshändiges Koordinatensystem. Wir haben eine Kugel mit einem Radius von 0,5, deren Mittelpunkt bei (0, 0,5, 0) liegt. Ich denke, wir können das Zentrum der Kugel als das einzig Wichtige betrachten, aber vielleicht kann eine Kugel dabei helfen, ein visuelles Bild aufzubauen. Der Eingabevektor, mit dem die Kugel in den beiden folgenden Beispielen übersetzt wird, ist (1, 0, 1).
Beispiele:
Verfügbare Daten:
Die verfügbaren Daten sind der Ort der Kugel, der Eingangsrichtungsvektor und die Normale der Ebene. Reichen diese Informationen aus, um das Problem lösen zu können, und wenn ja, wie? Wenn nein, welche weiteren Daten werden benötigt?
Okay - ich verstehe jetzt, dass du davon sprichst, den Boden zu verändern. Aber immer noch gilt dieses Prinzip: Die gleiche Transformation, die Sie auf den Boden angewendet haben, ist die Transformation, die auf den Ball angewendet wird.
Du hast das Flugzeug gedreht. Ich weiß nicht, wie Sie diese Drehung in Ihrem Programm erreicht haben, aber mathematisch wird sie als Matrix ausgedrückt das befriedigt , die Identitätsmatrix (wobei ist die Transponierte von ). Wenn ist dann der Normalenvektor zur ursprünglichen Ebene ist der Normalenvektor zur gedrehten Ebene.
Sie sagten auch, Sie hätten das Flugzeug bewegt (im Beispiel entlang der -Achse). Dies bedeutet, dass die neue Ebene nicht mehr durch den Ursprung verläuft (zumindest in Ihrem Beispiel der ursprüngliche Punkt). Dies ist eine Übersetzung, aber wir müssen vorsichtig sein, welche Übersetzung wir verwenden. Angenommen, das neue Flugzeug muss einen bestimmten Punkt passieren . In Ihrem Beispiel haben Sie angegeben, dass es durchläuft . Sie können das als Punkt verwenden . Da der Normalenvektor ist und es ging durch , ein Punkt ist im neuen Flugzeug, wenn
Also die Verwandlung in die ursprüngliche Ebene um das neue Flugzeug zu bekommen ist zu drehen durch , fügen Sie dann den Übersetzungsvektor hinzu :
(Falls Sie es nicht wissen, bedeutet "zuordnen zu". Das heißt, der ursprüngliche Wert auf der linken Seite wird in den Wert auf der rechten Seite transformiert.) Dies ist die gleiche Transformation, die Sie auf Ihre Kugel anwenden müssen, um nach der Transformation ihre neue Position zu erhalten. Wenn das ursprüngliche Zentrum der Kugel ist, wird das transformierte Zentrum sein
Lassen sei der "Eingangsrichtungsvektor" der horizontalen Kugelbewegung. Seit ist eine Richtung, kein Punkt, es übersetzt nicht. Der neue Richtungsvektor, in dem der Ball den geneigten Boden hinauffliegt, wird also gegeben durch
Die Eingaben, die Sie zur Lösung Ihres Problems benötigen, sind also der Rotationsvektor , und ein Punkt die das neue Flugzeug durchfliegt. Wenn Sie diese haben, können Sie sie verwenden, um die Grundebene, die Position der Kugel und die Bewegungsrichtung, alle drei, zu transformieren.
Paul Sinclair
Paul Sinclair
Benutzer1323245
Paul Sinclair
Benutzer1323245
Paul Sinclair
Benutzer1323245