Pitch Yaw Roll zu Quaternion und zurück von Markus
Brauchte ich um eine Anim8or .an8 Datei BlitzBasic tauglich zu machen :shock:

[code:1:b63fd0223f]

; BlitzBasic 3D Example

; Euler angles to quaternion and back

; 11.03.2003 by M.Rauch

Graphics3D 640,480,16,0

Local e=CreateMesh()

Local pitch#,yaw#,roll#
Local w#,x#,y#,z#

DebugLog "------------------------ Pitch Yaw Roll"

RotateEntity e,11,12,13

pitch#=EntityPitch (e)
yaw# =EntityYaw (e)
roll# =EntityRoll (e)

DebugLog "Pitch "+pitch
DebugLog "Yaw " +yaw
DebugLog "Roll " +roll

DebugLog "------------------------ Pitch Yaw Roll to Quaternion"

w#=Cos(yaw/2)*Cos(pitch/2)*Cos(roll/2) + Sin(yaw/2)*Sin(pitch/2)*Sin(roll/2)
x#=Cos(yaw/2)*Cos(pitch/2)*Sin(roll/2) - Sin(yaw/2)*Sin(pitch/2)*Cos(roll/2)
y#=Cos(yaw/2)*Sin(pitch/2)*Cos(roll/2) + Sin(yaw/2)*Cos(pitch/2)*Sin(roll/2)
z#=Sin(yaw/2)*Cos(pitch/2)*Cos(roll/2) - Cos(yaw/2)*Sin(pitch/2)*Sin(roll/2)

;Quaternion

DebugLog "w "+w
DebugLog "x "+x
DebugLog "y "+y
DebugLog "z "+z

pitch=0.0
yaw =0.0
roll =0.0

DebugLog "------------------------ Quaternion to Pitch Yaw Roll"

pitch=QuaternionToPitch(x,y,z,w)
yaw =QuaternionToYaw (x,y,z,w)
roll =QuaternionToRoll (x,y,z,w)

DebugLog "Pitch "+pitch
DebugLog "Yaw " +yaw
DebugLog "Roll " +roll

Stop
End

Function QuaternionToPitch#(x#,y#,z#,w#)

Return ASin(-2.0*(x*z-w*y))

End Function

Function QuaternionToYaw#(x#,y#,z#,w#)

Return ATan( 2.0*(x*y+w*z) / ( q2(w,y) + q2(x,y) - q2(y,y) - q2(z,y) ) )

End Function

Function QuaternionToRoll#(x#,y#,z#,w#)

Return ATan( 2.0*(w*x+y*z) / ( q2(w,y) - q2(x,y) - q2(y,y) + q2(z,y) ) )

End Function

Function q2#(a#,b#)

Return ((a*a)+(b*b))

End Function
[/code:1:b63fd0223f]



Suche:
(unterstützt mySQL Wildcards ala %)
Titel:
Text:
Autor: