Geometrieproblem: koordinaten transformation

cycovery

Erfahrenes Mitglied
Hi!

Also ich hab n mathematisches Problem und ich hoffe schwer, dass ihr mir dabei helfen könnt!

Folgende Situation:
http://neo.cycovery.com/koordinaten.jpg
Ich nenne das äussere, gerade System das grosse Koordinatensystem und das andere das kleine.

Folgendes weiss ich:

-X und Y Koordinaten von Punkt A

-X und Y Koordinaten von Punkt P

-Punkt P ist zudem der Ursprung des kleinen Systems

-X und Y Koordinaten von Punkt Q

-Punkt Q liegt auf der v Achse


Wissen will ich die die UV Koordinaten von Punkt A

Ich könnte das ganze Geometrisch lösen per Geraden schneiden und so, aber ich hätte eigentlich lieber eine (mehr oder weniger) kompakte funktion, die mir die Koordinaten umrechnet

zu Folgendem Ansatz bin ich gekommen (mein Resultat stimmt aber irgendwie nicht)

1. berechnenin welchem Winkel (Bogenmass) das kleine koordinatensystem zum grossen gedreht ist per Trigonometrie:
w=arctan(gegenkathete/Ankathete)
Da rechne ich noch PI/2 (=90°) dazu um die volle Drehung zu erhalten.

2. ich wandle die XY Koordinaten von A in Polare Koordinaten um und ziehe den vorhin berechneten Winkel W von Phi (der Winkelkoordinate der Polaren Koordinaten) ab. Dadurch ist Phi jetzt im grossen koordinatensystem gleichgross, wie Phi der polaren Koordinaten von A gesehen aus dem kleinen System in wirklichkeit haben.

3. ich setze den Radius r der neuen polaren Koordinaten von A gesehen aus dem Grossen system auf die diestanz A-P. Dadurch sollte ich den Punkt so verschoben haben, dass er im grossen System genau so liegt, wie er am anfang im kleinen Gelegen hat.

4. Ich wandle die Polaren Koordinaten ins Kartesische System Zurück. Diese neuen XY Koordinaten sollten nun den UV Koordinaten entsprechen, die ich ursprünglich suchte.




Aber irgendwie klappt das nicht . . . bitte helft mir O_o warscheinlich geht das viel einfacher und ich bin einfach zu blöd um das zu sehen . . .


Dankeschön!
 
Kennst du dich ein bisschen mit den mathematischen Begriffen Vektor und Basis aus? Das von dir dargestellte Problem ist nämlich nichts anderes als die Ermittlung der Koordinaten eines Punktes bezüglich einer bestimmten Basis.

Deine neue Basis (oder salopp gesagt: dein neues Koordinatensystem) konstruierst du dir, indem du zwei senkrecht aufeinanderander stehende Richtungsvektoren suchst, die jeweils die Länge 1 haben (ist dann sogar eine Orthonormalbasis, aber das nur nebenbei). Der eine Vektor ("v") soll dabei in Richtung P -> Q zeigen. Also:
Code:
v.x = Q.x - P.x;
v.y = Q.y - P.y;
Den Vektor noch normieren (auf die Länge 1 bringen):
Code:
length = sqrt(v.x*v.x + v.y*v.y);
v.x /= length;
v.y /= length;
Der ander Vektor ("u") soll auf "v" senkrecht stehen. Dazu vertauschen wir einfach die Koordinaten von "v" und ändern das Vorzeichen der y-Koordinate. Normiert ist "u" dann schon ganz von alleine:
Code:
u.x = v.y;
u.y = -v.x;

Wir suchen jetzt die Koordinaten r, s von A bezüglich der Basis u, v und des Ursprungs P. Damit müssen wir folgende Gleichung lösen:
A = P + r * v + s * u (von P ausgehend r Einheiten den Vektor v entlang, dann s Einheiten den Vektor u entlang)

Umgestellt ergibt sich:
r * v + s * u = A - P
und damit das lineare Gleichungssystem:
_I. r * v.x + s * u.x = A.x - P.x
II. r * v.y + s * u.y = A.y - P.y


Zur allgemeinen Lösung dieses GS wären jetzt Kenntnisse über Determinantenrechnung ganz hilfreich... jedenfalls lässt sich die Lösung dann folgendermaßen ermitteln:
Code:
D = v.x * u.y - v.y * u.x;
D_r = (A.x - P.x) * u.y - (A.y - P.y) * u.x;
D_s = (A.y - P.y) * v.x - (A.x - P.x) * v.y;
r = D_r / D;
s = D_s / D;
Et voilá, schon hast du die Koordinaten (r, s) von A bezüglich deiner neuen Basis. Ganz ohne irgendwelche Winkelfunktionen übrigens ;)

Ich weiß, die Theorie dahinter mag ohne entsprechendes Hintergrundwissen recht wirr erscheinen... ich hab jetzt mal auf langwierige Erläuterungen verzichtet, weil ich ja nicht weiß, wie es um deinen Wissensstand auf dem Gebiet steht. Wenn du etwas genauer erklärt haben willst, dann frag ruhig nach :)
 
Zurück