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.
Antworten
Chill-man
User
Beiträge: 24
Registriert: Dienstag 8. Januar 2008, 10:46

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:

Hi

Du sucht wahrscheinlich das Skalarprodukt.

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

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 ;-)
Antworten