Koordinatentransformation im R3

Hallo!

Für ein kleines Projekt, daß ich auf der Arbeit nebenher verfolge habe ich folgendes Problem:
Ich habe eine Unzahl von Punkten, die in mehreren Koordinatensystemen definiert sind und jetzt alle in ein gemeinsames Basiskoordinatensystem transformiert werden müssen. Alle diese lokalen Systeme sind diesem gemeinsamen Basissystem (oder globalen System) definiert.
Dies ist das (kanonische?) System mit dem Ursprung (0/0/0) und den Richtungsvektoren (1/0/0), (0/1/0) und (0/0/1) die die entsprechenden Einheitsvektoren E1,E2 und E3 repräsentieren.

Nach intensivem Rumkramen in meinen alten Mathe-Skripten habe ich mir folgendes Vorgehen überlegt:
Im Prinzip müsste das eine Translation mit einer Rotation sein, wenn die Punkte in einem lokalen kartesischen Koo-System definiert sind. Also muß ich eine Translationsmatrix T und eine Rotationsmatrix R bestimmen. Um also die Koordinaten(x,y,z)im globalen System aus den Koordinaten (x’,y’,z’) (im lokalen System) zu bestimmen lautet die Vorschrift:

(x,y,z)=T(invers)*(x’,y’,z’)+R(invers)*(x’,y’,z’)

Soweit alles richtig überlegt? Oder habe ich hier schon einen Gedankenfehler?

Punkt in einem lokalen kartesischem System:
Das System ist durch 3 Punkte A,B,C im globalen System (im R3) definiert, also berechne ich zunächst die neuen Einheitsvektoren dieses lokalen Systems E1’,E2’ und E3’

Laut Handbuch definieren die 3 Punkte das System wie folgt:
A definiert den Ursprung des neuen Koo-Systems, also:
A=Ursprung (immerhin: es geht recht simpel los)

Der Vektor von A nach B definiert die Richtung der z’-Achse
Vektor(AB)=B-A => z’-Richtung.
Normieren ergibt den Einheitsvektor E3’

Die Vektoren AB und AC definieren zusammen die x’-z’-Ebene des Systems
(Vektor(AB) x Vektor(AC))=y’-Richtung (x=Kreuzprodukt)
Normieren dieses Vektors ergibt E2’

Da in einem Rechtsystem gilt: (E1 x E2)=E3
Ist E1’=(E2’ x E3’) (oder bin ich hier in der Reihenfolge schon falsch?)

Ich habe dann also die drei neuen Einheitsvektoren berechnet.

Dann bestimme ich die einzelnen Winkel zwischen den Einheitsvektoren Ei und Ei’ für die Drehmatrix:

alpha(1)=Winkel zw. E1’ und E1
alpha(2)=Winkel zw. E2’ und E1
alpha(3)=Winkel zw. E3’ und E1
beta(1)= Winkel zw. E1’ und E2
… usw…
gamma(3)=Winkel zw. E3’ und E3

Damit erstelle ich die Rotationsmatrix mit den Richtungscosinussen:

R=
cos(alpha(1)) cos(beta(1)) cos(gamma(1))
cos(alpha(2)) cos(beta(2)) cos(gamma(2))
cos(alpha(3)) cos(beta(3)) cos(gamma(3))

(diese kommt mir allerdings recht komisch vor, nur Cosinusse…
Ist evt. das Skript hier falsch?)

und invertiere diese:
R(invers)=1/Det®*
cos(alpha(1)) -cos(alpha(2)) -cos(alpha(1))
-cos(beta(1)) cos(beta(2)) -cos(beta(2))
-cos(gamma(1)) -cos(gamma(2)) cos(gamma(3))

Die Translationsmatrix ist ja nur eine Verschiebung um den Vektor A mit den Komponenten A1,A2,A3

Also sollten die Koordinaten im globalen System lauten:

x=A1+(cos(alpha(1))*x’ -cos(alpha(2))*y’ -cos(alpha(1))*z’)
y und z dann entsprechend.

Leider ist das Ergebnis gänzlich anders als erwartet. Da man hier eine Menge Fehler machen kann bin ich schon mehrere Tage dabei in der Mittagspause rumzuprokeln. Wer mag mir helfen?

Die 2. und 3. Aufgabe wäre dann die Koordinaten aus den sphärischen und zylindrischen Systemen ins globale kartesische System zu transformieren, aber solange ich das obige Problem noch nicht im Griff habe, traue ich mich da noch nicht ran.

In der stillen Hoffnung auf kompetente Hilfe…

Jürgen

Auch hallo.

Für ein kleines Projekt, daß ich auf der Arbeit nebenher
verfolge habe ich folgendes Problem:
Ich habe eine Unzahl von Punkten, die in mehreren
Koordinatensystemen definiert sind und jetzt alle in ein
gemeinsames Basiskoordinatensystem transformiert werden
müssen. Alle diese lokalen Systeme sind diesem gemeinsamen
Basissystem (oder globalen System) definiert.
Dies ist das (kanonische?) System mit dem Ursprung (0/0/0) und
den Richtungsvektoren (1/0/0), (0/1/0) und (0/0/1) die die
entsprechenden Einheitsvektoren E1,E2 und E3 repräsentieren.

Vorsicht: die Verwendung unterschiedlicher Koordinatensysteme ist im Geobereich gang und gebe. Gauss-Krüger ist z.B. so ein Kandidat
Um ein KO-System zu transformieren müsste man z.B. sagen, dass alle x-Werte mit einem neuen Berechnungsfaktor versehen werden. Einfach nur die Punkte rotieren und verschieben lassen ist keine KO-Transformation.
Vielleicht ist hier was dabei: http://de.wikipedia.org/wiki/Koordinatentransformation , Suchmaschine @ Koordinatentransformation skript filetype:stuck_out_tongue:df

Nach intensivem Rumkramen in meinen alten Mathe-Skripten habe
ich mir folgendes Vorgehen überlegt:
Im Prinzip müsste das eine Translation mit einer Rotation
sein, wenn die Punkte in einem lokalen kartesischen Koo-System
definiert sind. Also muß ich eine Translationsmatrix T und
eine Rotationsmatrix R bestimmen. Um also die
Koordinaten(x,y,z)im globalen System aus den Koordinaten
(x’,y’,z’) (im lokalen System) zu bestimmen lautet die
Vorschrift:

(x,y,z)=T(invers)*(x’,y’,z’)+R(invers)*(x’,y’,z’)

Soweit alles richtig überlegt? Oder habe ich hier schon einen
Gedankenfehler?

Allerdings, weil das ursprüngliche Koo-System dadurch nicht verschwindet :wink:

Morgen geht’s weiter…
In der Zwischenzeit: Schlagwort ‚mathematische Grundlagen der Computergeometrie‘ aka Computergraphik

Bis denne
mfg M.L.

Koordiantenumrechnung (keine Geländedaten)
Hi!

Vorsicht: die Verwendung unterschiedlicher Koordinatensysteme
ist im Geobereich gang und gebe. Gauss-Krüger ist z.B. so ein
Kandidat

Hier gehts nicht um Geländedaten oder GPS oder so!
Im Prinzip stellen die einzelnen Punkte die ich habe, eine Oberflächenbeschreibung eines Körpers, also quasi ein Modell dar. Aus verschiedenen Gründen sind einige dieser Punkte in einem anderen Koordinatensystem abgelegt. Von diesen Punkten weiß ich (neben ihren lokalen Koordinaten) wie das Koordinatensystem in dem sie definiert sind im großen globalen Koordinatensystem errichtet werden.
Prinzipiell kann ich den ganzen Punktewust in ein Programm einladen, die Koordinaten dort transformieren und wieder rausschreiben. Das Problem ist nur, daß ich dann die Information der lokalen System verliere und das Modell dann nicht mehr korrekt funktioniert oder immer zwei Modelle halten und pflegen muß, was naturgemäß immer wieder mal zu Problemen führt.

Um ein KO-System zu transformieren müsste man z.B. sagen, dass
alle x-Werte mit einem neuen Berechnungsfaktor versehen
werden. Einfach nur die Punkte rotieren und verschieben lassen
ist keine KO-Transformation.

Mag sein, daß der Fachbegriff nicht i.O. ist, daher habe ich mal den Titel verändert…
Mein Problem ist, daß ich die Koordinaten x’,y’ und z’ aus dem lokalen System S’ in die Koordinaten x,y und z des Basis (oder globalen) Systems umrechnen muß.
Das System S’ ist dabei in der Regel kartesisch und seine Einheitsvektoren liegen unter irdgendeinem Winkel zu den Einheitsvektoren des Basissystems und ihr Ursprung ist auch nicht identisch. Daher meine Idee: erst die Ursprünge aufeinander schieben (Translation) und dann die Einheitsvektoren vin S’ so drehen, daß sie mit den Einheitsvektoren des Basissystems übereinstimmen (Rotation)

Vielleicht ist hier was dabei:
http://de.wikipedia.org/wiki/Koordinatentransformation

Da war ich schon, hilft mir leider nicht weiter…

Soweit alles richtig überlegt? Oder habe ich hier schon einen
Gedankenfehler?

Allerdings, weil das ursprüngliche Koo-System dadurch nicht
verschwindet :wink:

Solls ja auch nicht, es ist nach der Transformation (oder Umrechnung oder wie auch immer das mathematisch heißt) der Koordinaten unwichtig und mein Programm kann es „vergessen“

Morgen geht’s weiter…
In der Zwischenzeit: Schlagwort ‚mathematische Grundlagen der
Computergeometrie‘ aka Computergraphik

Tja, da findet Google und Co. so einiges. Leider bin ich bisher auf nichts substantielles gestoßen, was in meine Richtung führt. Am weitesten bin ich mit mathematischen Skripten zur Abbildungs- und Vektorgeometrie gekommen (damit habe ich mir den ganzen Rechenweg erarbeitet). Aber leider muß irgendwo ein Fehler sein, deshalb versuch ich das mal hier…

In gespannter Erwartung…

Jürgen

Hallo,

Hier gehts nicht um Geländedaten oder GPS oder so!
Im Prinzip stellen die einzelnen Punkte die ich habe, eine
Oberflächenbeschreibung eines Körpers, also quasi ein Modell
dar. Aus verschiedenen Gründen sind einige dieser Punkte in
einem anderen Koordinatensystem abgelegt. Von diesen Punkten
weiß ich (neben ihren lokalen Koordinaten) wie das
Koordinatensystem in dem sie definiert sind im großen globalen
Koordinatensystem errichtet werden.

Was für ein Koordinatensystem ist das denn? Wenn du z.B. im „lokalen“ Koordinatensystem Kugelkoordinaten (r, theta, phi) verwendest, kannst du das ganze doch einfach in Kartesische Koordinaten umrechnen, sobald du mit ihnen rechnen willst. Oder umgekehrt, du kannst die kartesischen Koordinaten der anderen Punkte in dein lokales Koordinatensystem transformieren. Ist genau dieser Schritt dein Problem?

Prinzipiell kann ich den ganzen Punktewust in ein Programm
einladen, die Koordinaten dort transformieren und wieder
rausschreiben. Das Problem ist nur, daß ich dann die
Information der lokalen System verliere und das Modell dann
nicht mehr korrekt funktioniert oder immer zwei Modelle halten
und pflegen muß, was naturgemäß immer wieder mal zu Problemen
führt.

Wie oben gesagt: du kannst eine gemeinsame Datenbasis pflegen, und wenn du es brauchst, on-the-fly in ein gemeinsames System umrechnen.

Um ein KO-System zu transformieren müsste man z.B. sagen, dass
alle x-Werte mit einem neuen Berechnungsfaktor versehen
werden. Einfach nur die Punkte rotieren und verschieben lassen
ist keine KO-Transformation.

i.A. hilft eine Matrixmultiplikation, glaube ich…

Mein Problem ist, daß ich die Koordinaten x’,y’ und z’ aus dem
lokalen System S’ in die Koordinaten x,y und z des Basis (oder
globalen) Systems umrechnen muß.
Das System S’ ist dabei in der Regel kartesisch und seine
Einheitsvektoren liegen unter irdgendeinem Winkel zu den
Einheitsvektoren des Basissystems und ihr Ursprung ist auch
nicht identisch. Daher meine Idee: erst die Ursprünge
aufeinander schieben (Translation) und dann die
Einheitsvektoren vin S’ so drehen, daß sie mit den
Einheitsvektoren des Basissystems übereinstimmen (Rotation)

Jetzt kommen wir der Sache näher. Also sind beide Koordinatensysteme kartesisch?

Eine Idee scheinst du ja schon zu haben; wo ist jetzt genau dein Problem?

Tja, da findet Google und Co. so einiges. Leider bin ich
bisher auf nichts substantielles gestoßen, was in meine
Richtung führt. Am weitesten bin ich mit mathematischen
Skripten zur Abbildungs- und Vektorgeometrie gekommen (damit
habe ich mir den ganzen Rechenweg erarbeitet). Aber leider muß
irgendwo ein Fehler sein, deshalb versuch ich das mal hier…

Wie äußert sich dieser Fehler?

Die Translation sollte ja erstmal nicht so schwer sein. Du musst nur darauf achten, das richte System zu verschieben.

Und die Rotation sollte mit einer Drehmatrix machbar sein. (Wikiepedia liefert die Basics http://de.wikipedia.org/wiki/Rotationsmatrix , genaueres findet man in diversen Skripten).

In gespannter Erwartung…

… auf weiter Fragen? *g*

Grüße,
Moritz

Hallo Jürgen,

Im Prinzip müsste das eine Translation mit einer Rotation
sein, wenn die Punkte in einem lokalen kartesischen Koo-System
definiert sind. Also muß ich eine Translationsmatrix T und
eine Rotationsmatrix R bestimmen.

Translationsmatrix? Sowas gibt es leider nicht. Eine Translation ist keine lineare Abbildung. Nichtsdestotrotz läßt sich eine Translation natürlich beschreiben, nur nicht in Matrix-Multiplikations-Manier, sondern ganz einfach durch

t(x&gt:wink: = x> + s>

(t = Funktion „Translation“, x> = zu translatierender Vektor, s> = Translationsvektor).

Um also die
Koordinaten(x,y,z)im globalen System aus den Koordinaten
(x’,y’,z’) (im lokalen System) zu bestimmen lautet die
Vorschrift:

(x,y,z)=T(invers)*(x’,y’,z’)+R(invers)*(x’,y’,z’)

Wenn ich die von Dir gewünschte Funktion mal mit f bezeichne, dann stellt sich die Chose dar als

f(x&gt:wink: = D(t(x&gt:wink:) = D (x\> + s&gt:wink:

oder in Deiner Notation

(x, y, z) = D (x'+sx, y'+sy, z'+sz)

mit s> = Translationsvektor, D = Drehmatrix. Es wird also erst translatiert und dann gedreht.

Um die Drehmatrix D auszurechnen, benötigst zu zwei Inputs: 1. Die Drehachse, spezifiziert durch den Einheitsvektor e> = (u, v, w), der in ihre Richtung zeigt, 2. den Drehwinkel phi.

Daraus ergibt sich D zu folgendem ziemlich monströsem Dingens:

( c + (1-c)u² (1-c)uv + sw (1-c)uw - sv )
( (1-c)uv - sw c + (1-c)v² (1-c)vw + su )
( (1-c)uw + sv (1-c)vw - su c + (1-c)w² )
~
mit c := cos(phi), s := sin(phi)

Hilft Dir das weiter?

Mit freundlichem Gruß
Martin

Hi!

Wie oben gesagt: du kannst eine gemeinsame Datenbasis pflegen,
und wenn du es brauchst, on-the-fly in ein gemeinsames System
umrechnen.

Genau das ist meine Absicht!

i.A. hilft eine Matrixmultiplikation, glaube ich…

Soweit war ich ja schon (siehe mein erstes Posting zu diesem Thema)

Eine Idee scheinst du ja schon zu haben; wo ist jetzt genau
dein Problem?

Siehe mein erstes Posting: Ich bestimme anahnd der im Handbuch beschriebenen Regeln die Einheitsvektoren des lokalen Koordiantensystems und dann kommt eben das mit der Matrixgeschichte:
Meine Idee: um die Koordinaten des lokalen Systems in das globale System umzurechnen brauche ich eine Translation (um die Ursprünge „zusammenzuschieben“ und eine Rotation (damit die Einheitsvektoren in die gleiche Richtung zeigen)

Wie ich die Einheitsvektoren des lokalen Systems finde habe ich im ersten Posting beschrieben und auch wie ich mir das mit der Translation und der Rotation vorstelle. Leider bin ich mir nicht sicher, ob die Rotationsmatrix die ich benutze stimmt oder ob mein Rechenweg überhaupt der richtige ist…

Und die Rotation sollte mit einer Drehmatrix machbar sein.
(Wikiepedia liefert die Basics
http://de.wikipedia.org/wiki/Rotationsmatrix , genaueres
findet man in diversen Skripten).

Sieht alles ganz gut aus was da steht, allerdings frage ich mich welchen Winkel alpha die dort benutzen? Ist das der Winkel zwischen E1 und E1’ oder der „Durchschnittswinkel“ aller Winkel den die Einheitsvektoren untereinander haben oder noch wieder was anderes?
Denn im allgemeinen Fall kann ich ja 9 Winkel bestimmen: zw. E1 und E1’, E2 und E2’, E3 und E3’, E1 und E2’, usw.
In meinem Matheskript werden diese Winkel mit alpha(1) bis alpha(3), beta(1) … bis gamma(3) bezeichnet, die ich dann in die Rotationsmatrix einsetzen soll (sieh erstes Posting)

In gespannter Erwartung… auf nette Antworten :smile:

Ciao

Jürgen