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
Orientierungsmatrizen in Richtungsgrade umwandeln
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:
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.
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
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:
irgendwie weiss ich jedoch nicht wie ich die genau anwenden kann, also was wofür steht.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²))
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