0 Daumen
1,6k Aufrufe

Ich benötige eure Hilfe. Ich programmiere derzeit eine Anwendung und benutze eine alte Bibliothek, die hier im Unternehmen immer weiter gereicht wurde. Ich führe eine Koordinatentransformation durch, auf die Frage, wie die Funktion realisiert ist, konnte mir es leider keiner beantworten. Der Vorgang ist wie folgt.

- Ich habe die Koordinaten des alten Koordinatensystems.

- Mit einer Schablone auf dem Tisch kann ich 3 Punkte des alten Koordinatensystems speichern.

- Beim ersten Punkt handelt es sich um den Ursprung

- Der zweite Punkt befindet sich auf der X-Achse

- Der dritte Punkte liegt auf der Y-Achse

- Ich bilde zwei Vektoren vom Ursprung jewels zum Punkt der X- und Y-Achse

Den rest macht meine Funktion, der ich die zwei Vektoren weitergebe. Der Rückgabewert dieser Funktion sind die Koordinaten des neuen Koordinatensystems. Wenn ich also den Ursprung wieder anfahre (Punkt 1) befinde ich mich bei ( 0 | 0 | 0). Mich interessieren jetzt die mathematischen Schritte, die dahinter stecken. Kann mir das jemand erklären oder mich auf eine passende Antwort verweisen?

Avatar von

Hallo
du sagst, du hat das alte System, aber was weiss man über das neue? gedreht, verschoben,wieder rechtwinklig?

 ist das alte rechtwinklig?

 Gruß lul  

Ich habe die Koordinaten des alten Koordinatensystems.

meinst Du 'Koordinaten im alten K-System' oder 'Koordinaten des alten K-Systems'? Letzteres gibt es so nicht. Es gibt nur Koordinatentransformationen von einem in das andere K-System.

Der Rückgabewert dieser Funktion sind die Koordinaten des neuen Koordinatensystems.

Was ist damit genau gemeint? Wie viele Zahlen und in welcher Form bekommst Du zurück?


Tipp: Wenn Du die drei Punkte (Ursprung, auf X und auf Y) eingibst, so gebe den Punkt auf der X-Achse doch mal etwas daneben ein. Und dann fahre die drei Punkte an, die Du eingeben hast, und sage uns, was Du für Koordinaten bekommst.

Mit dieser Information kann ich Dir besser antworten.

Gruß Werner

Das Ergebnis ist ein rechtwinkliges Koordinatensystem. Es wird aus dem dritten punkt das Lot gefällt, zur X-Achse die aus den ersten zwei punkten besteht. Anscheinend wird dann das Kreuzprodukt berechnet um die Z-Achse zu generieren. Aber wie genau der Mathematische hintergrund aussieht, ist mir nicht bekannt.

Es wird aus dem dritten punkt das Lot gefällt, zur X-Achse die aus den ersten zwei punkten besteht.

An die Möglichkeit hatte ich gar nicht gedacht, mir fallen auf Anhieb noch ein halbes Dutzend andere ein ... es ist eben nicht eindeutig!

Daher nochmal nachgefragt. Du schriebst:

Der Rückgabewert dieser Funktion sind die Koordinaten des neuen Koordinatensystems.

Was ist damit genau gemeint? Wie viele Zahlen und in welcher Form bekommst Du diese Zahlen von der Funktion zurück?

PS.: hoffe ich habe heute Abend Zeit für eine ausführliche Antwort.

Also der Rückgabewert meiner Funktion ist der Punkt im neuen Koordinatensystem. Ich füttere meine Funktion mit dem Ursprungspunkt, dem Punkt aus dem alten Koordinatensystem (dieser wird kontinuierlich von meinem Sender bestimmt und somit wird bei Bewegung dieses Senders auch kontinuierlich der neue Punkt im neuen Koordinatensystem berechnet) und drei Vektoren. Diese drei Vektoren bekomme ich aus einer anderen Funktion, diese Funktion wird mit den zwei vektoren gefüttert die ich mit den 3 Punkten bestimmt habe. 

1 Antwort

+1 Daumen

Hallo belaya,

Soweit ich Dich verstanden habe läuft das im Prinzip wie folgt ab: Es gibt zwei Koordinatensysteme, die ich mal mit 0-System (das 'alte' Koordinatensystem) und 1-System (das 'neue') bezeichne. Du gibst drei Punkte im 0-System vor $${^0p}_1, \space {^0p}_2, \space {^0p}_3$$ die vorgestellte 0 gibt an, auf welches System sich die Koordinaten in diesem Vektor beziehen - hier das 0-System (das 'alte' Koordinatensysten). Aus diesen drei Vektoren soll nun das 1-System bestimmt werden. Dazu wird zuerst das Lot von \({^0p}_3\) auf die Gerade durch \({^0p}_1\) und \({^0p}_2\) gefällt. Ich berechne den Einheitsvektor \(n\) parallel zu dieser Geraden: $$n = \frac{{^0p}_2 -{^0p}_1}{ |{^0p}_2 - {^0p}_1| }$$ Die Gerade würde dann lauten: $$g: \space x = {^0p}_1 + t \cdot n$$ Der Fußpunkt \({^0p}\) des Lotes von \({^0p}_3\) auf \(g\) ist dann

$${^0p} = {^0p}_1 + \left< {^0p}_3 - {^0p}_1,\, n \right> n$$ Der Ausdruck \(\left< {^0p}_3 - {^0p}_1,\, n \right>\) ist das Skalarprodukt. Siehe auch Wikipedia zum Thema Lot und bedenke, dass hier \(|n|=1\) ist.

Dieser Punkt \(^0p\) ist jetzt auch definitionsgemäß der Koordinatenursprung des 1-Systems. Und \(n\) ist die erste Koordinatenrichtung des 1-Systems in den Koordinaten des 0-Systems. Fehlen also noch die anderen beiden. Die zweite Koordinatenrichtung bzw. der zweite Einheitsvektor \(o\) ist $$o = \frac{{^0p}_3 - {^0p}} {|{^0p}_3 - {^0p}|}$$ und der dritte Vektor \(a\) ist dann einfach (Du hattest es oben schon gesagt!) $$ a = n \times o$$ Aus diesen vier Vektoren kann man nun die (homogene) Transformationsmatrix \({^0T}_1\) aufstellen: $${^0T}_1 = \begin{pmatrix} n & o & a & {^0p}\\ 0 & 0& 0 & 1 \end{pmatrix} = \begin{pmatrix} n_x & o_x & a_x & {^0p}_x \\ n_y & o_y & a_y & {^0p}_y \\ n_z & o_z & a_z & {^0p}_z \\ 0 & 0& 0 & 1 \end{pmatrix}$$ Eine 4x4-Matrix, deren letzte Zeile aus 0'en und einer 1 besteht. Liegt nun ein Punkt \({^1q}\) im 1-System vor, so kann man daraus dessen Pendant \({^0q}\) im 0-System berechnen $${^0q} = {^0T}_1 \cdot {^1q}$$ Bleibt noch zu erwähnen, dass \({^1q}\) für dieses Manöver mit einer 4.Koordinate (einer 1) ausgerüstet wurde! Diese Darstellung als homogene Transformation hat den Vorteil, dass man sie mit einer Matrix-Vektor-Multiplikation erschlagen kann. Ansonsten müsste man die Translation vom 0-System nach \({^0p}\) gesondert aufführen und nur die anschließende Rotation wäre eine Matrix-Vektor-Multiplikation - also eine lineare Abbildung.

Vom 1- zum 0-System wollten wir aber gar nicht, sondern so wie Du es beschrieben hast, gibst Du eine Koordinate im 'alten' - dem 0-System - vor und erhältst eine im neuen - dem 1-System. Dazu wird \({^0T}_1\) invertiert $${^1T}_0 = \left( {^0T}_1 \right)^{-1}$$ Und nun kann aus einem Punkt \({^0q}\) im alten System sein Pendant \({^1q}\) im neuen berechnet werden: $${^1q} = {^1T}_0\cdot {^0q}$$

Wenn ich also den Ursprung wieder anfahre (Punkt 1) befinde ich mich bei ( 0 | 0 | 0).

Genau - es ist zum Beispiel $$ {^1T}_0\cdot {^0p} = \vec{0}$$ Konkrete Beispiele mit Zahlen kannst Du sehr schön mit Excel oder einem anderen Tabellenkalkulationsprogramm durchrechnen. Es gibt da die komfortablen Befehle MMULT, MINV und MTRANS.

Falls Du noch Fragen hast, so musst Du leider auf die Antwort länger warten. Ich bin ab jetzt 8 Tage offline.

Gruß Werner

Avatar von 48 k

Wie interpretiere ich das t in der ersten Geraden?

Wie interpretiere ich das t in der ersten Geraden?

Der Ausdruck \(g: \space x = {^0p}_1 + t \cdot n\) ist eine Gerade in der sogenannten Parameterdarstellung (Bem.: das \(s\) im Wiki-Artikel entspricht hier dem \(t\)). \({^0p}_1\) ist ein Punkt auf der Geraden und \(n\) der Richtungsvektor. \(t\) ist eine beliebige Zahl (Bem.: \(t \in \mathbb{R}\)), mit der quasi jeder Punkt auf der Geraden 'angefahren' werden kann.

Die Parameterdarstellung einer Geraden ist unabhängig von der Dimension (2D oder 3D oder mehr)

Ein anderes Problem?

Stell deine Frage

Willkommen bei der Mathelounge! Stell deine Frage einfach und kostenlos

x
Made by a lovely community