Orientierungsmatrizen in Richtungsgrade umwandeln

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Chill-man
User
Beiträge: 24
Registriert: Dienstag 8. Januar 2008, 10:46

Orientierungsmatrizen in Richtungsgrade umwandeln

Beitragvon Chill-man » Dienstag 3. Juni 2008, 12:52

Hallo,

ich habe mal wieder eine Frage und zwar möchte ich Orientierungsmatrizen so umwandeln, dass mir die Richtungen in Grade angezeigt werden (sprich 15° von der X-Achse). Die X-Achse ist sozusagen die Mittellinie(Ich brauche nur die Orientierungsrichtung zur X-Achse).

Die Orientierungsmatrizen bestehen aus 3 Vektoren:

[[X, Y, Z], [X, Y, Z], [X, Y, Z]]

Vielen Dank schonmal für eure Hilfe.

mfg Chill-man
rayo
User
Beiträge: 773
Registriert: Mittwoch 5. November 2003, 18:06
Wohnort: Schweiz
Kontaktdaten:

Beitragvon rayo » Dienstag 3. Juni 2008, 15:31

Hi

Du sucht wahrscheinlich das Skalarprodukt.

Gruss
Chill-man
User
Beiträge: 24
Registriert: Dienstag 8. Januar 2008, 10:46

Beitragvon Chill-man » Donnerstag 5. Juni 2008, 11:04

Hallo rayo,

danke für deine Antwort, jedoch komme ich damit nicht so recht weiter.

Ich habe mal im Taschenbuch der Mathematik nachgeschaut und fand dort eine Formel die den Winkel zwischen einer Geraden und einer Ebene beschreibt.

Formel:

Winkel zwischen einer Geraden und einer Ebene
gegeben durch die Gleichungen

x-x1/l = y-y1/m = z-z1/n

Ax + By + Cz + D = 0


werden berechnet nach der Formel:

sin phi = Al + Bm + Cn / Wurzel aus((A² + B² + C²)(l² + m² + n²))


irgendwie weiss ich jedoch nicht wie ich die genau anwenden kann, also was wofür steht.
Wär vielleicht jemand so nett und würde mir das etwas näher erläutern?

Danke,

Chill-man

------------------------------------------------------------------------------------
###############################################

EDIT:

Ok, habs schon verstanden

ich muss erst den Normalenvektor der Ebene bilden und dann das Skalarprodukt zwischen Normalenvektor und Geradenvektor bilden.
Das ganze wird dann noch durch das Produkt der Länge der jeweiligen Vektoren geteilt

EDIT2:

Hab jetzt das erstmal im Code stehen.

Code: Alles auswählen

#stuetzvektor
   xOri = Car.getOrientation()[0]
   x1Ori = xOri[0]
   x2Ori = xOri[1]
   x3Ori = xOri[2]
   
   #erster richtungsvektor
   yOri = Car.getOrientation()[1]
   y1Ori = yOri[0]
   y2Ori = yOri[1]
   y3Ori = yOri[2]
   
   #zweiter richtungsvektor
   zOri = Car.getOrientation()[2]
   z1Ori = zOri[0]
   z2Ori = zOri[1]
   z3Ori = zOri[2]
   
   
   #Kreuzprodukt zur gewinnung des normalenvektors
   n1 = y2Ori * z3Ori - y3Ori * z2Ori
   n2 = y3Ori * z1Ori - y1Ori * z3Ori
   n3 = y1Ori * z2Ori - y2Ori * z1Ori
   n_vektor = [n1, n2, n3]
   
   #print n_vektor
   
   gerade = [1, 0, 0]
   
   zaehler = math.fabs(n1 * gerade[0] + n2 * gerade[1] + n3 * gerade[2])
   
   #print zaehler
   
   nenner = math.sqrt((n1 * n1 + n2 * n2 + n3 * n3) * (gerade[0] * gerade[0] + gerade[1] * gerade[1] + gerade[2] * gerade[2]))
   #print nenner
   
   winkel = math.asin(zaehler / nenner)
   print winkel



aber der spuckt mir immer werte von -1 bis +1 aus. Hab ich da irgendwas falsch gemacht?


EDIT3:

Typischer Taschenrechner fehler ists gewesen...

math.asin(z) gibt werte in radians zurück.

musste dann nur ein math.degrees(math.asin(z)) daraus machen und schon hats geklappt ;-)

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder