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] |