Angenommen, Sie wissen, was die Welttransformationsmatrix für das Objekt A ist, dann müssen Sie nur die Inverse dieser Matrix konstruieren und haben, was Sie brauchen.
Angenommen , die Rotation, Skalierung und Umsetzungsmatrizen des Objekts A verwendete , um es zu globalem Raum ist R , S und T ist. Sie werden diese wie multiplizieren
S * R * T = W
Nehmen Sie nun W und finden Sie irgendwie das inverse W ^ -1 . Die Umkehrung einer Matrix ist diejenige Matrix, die genau das Gegenteil bewirkt. Das Produkt der Matrix mit ihrer Inversen ist immer die Identitätsmatrix.
W * W ^ -1 = I
also W ^ -1 = I / W ;
Wenden Sie nun diese inverse Matrix als Welttransformation auf die Szene an, und jedes Objekt befindet sich in den gewünschten Koordinaten.
Informationen zur Matrixmultiplikation finden Sie auf dieser Seite.
Informationen zur Identitätsmatrix finden Sie hier.
Hier ist eine weitere Seite, auf der Sie die Matrizen finden, die Sie benötigen, um W zu erstellen .
In der obigen Frage sollten Sie die Verschiebung in der x-Achse als 50, die Verschiebung in der y-Achse als 50, keine Skalierung in einer der beiden Achsen und eine von Ihnen nicht angegebene Rotation annehmen.
Ich habe dies in der Vergangenheit eher mit Trigonometrie als mit Matrizen gemacht (ich bin ein Matrix-Noob). Die Antwort von Ashes999 ist auf halbem Weg. Ermitteln Sie den relativen Vektor und drehen Sie ihn dann um die Umkehrung des Winkels von EntityA.
quelle
Lassen Sie mich versuchen, Ihnen irgendetwas zwischen der Antwort von The Light Spark und der Antwort von Elliot zu sagen, denn nach dem, was ich gelesen habe, suchen Sie wirklich nach einem Algorithmus, dem Sie folgen können, und nicht nur nach Mathematik.
Problemstellung: Wenn Sie eine Position
A (50, 50)
und eine Überschrift haben (da Sie keine angegeben haben, werde ich diese als bestätigeny = 2 * x + 25
), finden Sie, woB (80, 90)
sich die relativeA
Position und die Überschrift befinden.Was Sie tun möchten, ist eigentlich ziemlich einfach. 1) Wechseln Sie
A
zum Ursprung Ihres Systems. Dies bedeutet einfach, dass die Local-to-A
Values die globalen Positionswerte minus den globalen Positionswerten von sindA
.A
wird(0, 0)
undB
wird(30, 40)
.1.1) Die Überschrift muss ebenfalls verschoben werden. Dies ist eigentlich sehr einfach, da der y-Achsenabschnitt in lokaler
A
Hinsicht immer 0 ist und sich die Steigung nicht ändert, also haben wiry = 2 * x
als Überschrift.2) Nun müssen wir die vorherige Überschrift auf die X-Achse ausrichten. Wie machen wir das? Der einfachste Weg, dies konzeptionell zu tun, besteht darin, die x, y-Koordinaten in ein Polarkoordinatensystem umzuwandeln. Das Polarkoordinatensystem umfasst
R
den Abstand zu einem Ort undphi
einen Drehwinkel von der x-Achse.R
ist definiert alssqrt(x^2 + y^2)
undphi
ist definiert alsatan(y / x)
. In den meisten Computersprachen wird heutzutage eineatan2(y, x)
Funktion definiert, die genau das Gleiche tutatan(y/x)
, jedoch so, dass die Ausgabe in der Regel zwischen -180 und 180 Grad und nicht zwischen 0 und 360 Grad liegt, aber beide funktionieren.B
so wirdR = sqrt(30^2 + 40^2) = sqrt(2500) = 50
undphi = atan2(40, 30) = 53.13
in grad.Ebenso ändert sich nun die Überschrift. Dies ist etwas schwierig zu erklären, aber da die Überschrift per Definition immer durch unseren Ursprung verläuft
A
, müssen wir uns keine Sorgen um dieR
Komponente machen. Überschriften werden immer in Form vonphi = C
, woC
eine Konstante ist . In diesem Fallphi = atan(2 * x / x) = atan(2) = 63.435
Grad.Jetzt können wir das System drehen, um die Überschrift auf die X-Achse des lokalen
A
Systems zu verschieben. Ähnlich wie beim ÜbergangA
zum Ursprung des Systems müssen wir nurphi
die Überschrift von allenphi
Werten im System subtrahieren . Also dasphi
vonB
wird53.13 - 63.435 = -10.305
Grad.Schließlich müssen wir die Polarkoordinaten wieder in x, y-Koordinaten umwandeln. Die Formel für diese Transformation lautet
X = R * cos(phi)
undY = R * sin(phi)
. DafürB
bekommen wirX = 50 * cos(-10.305) = 49.2
undY = 50 * sin(-10.305) = 8.9
soB
in OrtskoordinatenA
nah dran(49,9)
.Hoffentlich hilft das und ist leicht genug in der Mathematik, damit Sie folgen können.
quelle
Sie müssen die Position von Entität A im globalen Raum (x1, y1, θ) kennen, wobei θ die Ausrichtung relativ zur x-Achse ist.
So konvertieren Sie die EntityB-Position von einer globalen Koordinate (x2, y2) in eine lokale Koordinate (x2 ', y2'):
Global zu lokal
Lokal zu Global
Matrizen verwenden:
Global zu lokal
Lokal zu Global
quelle
Um es einfach auszudrücken: Entität B würde einen Verweis auf Entität A benötigen. Sie müssten dann die Differenz zwischen der Position A der Entität und der Position B der Entität ermitteln.
quelle