8,484
edits
Paradox-01 (talk | contribs) m (extra anchors: rot -> mat; mat -> rot)  | 
				Paradox-01 (talk | contribs)   (moving scripting content peu a peu)  | 
				||
| Line 5: | Line 5: | ||
===math===  | |||
====euler rotation -> matrix====   | |||
 function cosn (n)  | |||
 	cosn = cos(XSIMath.DegreesToRadians(n))  | |||
 end function  | |||
 function sinn (n)  | |||
 	sinn = sin(XSIMath.DegreesToRadians(n))  | |||
 end function  | |||
 ' ################  | |||
 logmessage "input"  | |||
 x = 60 : logmessage x  | |||
 y = 60 : logmessage y  | |||
 z = 60 : logmessage z  | |||
 logmessage "##################"  | |||
 logmessage "converted"  | |||
 set RotMatX = XSIMath.CreateMatrix3(1, 0, 0, 0, cosn(x), sinn(x), 0, -sinn(x), cosn(x))  | |||
 set RotMatY = XSIMath.CreateMatrix3(cosn(y), 0, -sinn(y), 0, 1, 0, sinn(y), 0, cosn(y))  | |||
 set RotMatZ = XSIMath.CreateMatrix3(cosn(z), sinn(z), 0, -sinn(z), cosn(z), 0, 0, 0, 1)  | |||
 RotMatZ.MulInPlace RotMatY  | |||
 RotMatZ.MulInPlace RotMatX  | |||
 for i=0 to 2  | |||
 	for j=0 to 2  | |||
 		logmessage RotMatZ (i, j)  | |||
 	next  | |||
 next   | |||
 ' INFO : input  | |||
 ' INFO : 60  | |||
 ' INFO : 60  | |||
 ' INFO : 60  | |||
 ' INFO : ##################  | |||
 ' INFO : converted  | |||
 ' INFO : 0,25  | |||
 ' INFO : 0,808012701892219  | |||
 ' INFO : 0,53349364905389  | |||
 ' INFO : -0,433012701892219  | |||
 ' INFO : -0,399519052838329  | |||
 ' INFO : 0,808012701892219  | |||
 ' INFO : 0,866025403784439  | |||
 ' INFO : -0,433012701892219  | |||
 ' INFO : 0,25  | |||
====euler rotation <-  | ====matrix -> euler rotation====  | ||
 Function Atan2(y, x)  | |||
   If x > 0 Then  | |||
     Atan2 = Atn(y / x)  | |||
   ElseIf x < 0 Then  | |||
     Atan2 = Sgn(y) * (XSIMath.PI - Atn(Abs(y / x)))  | |||
   ElseIf y = 0 Then  | |||
     Atan2 = 0  | |||
   Else  | |||
     Atan2 = Sgn(y) * XSIMath.PI / 2  | |||
   End If  | |||
 End Function  | |||
  function ToEuler(M00, M10, M20, M21, M22)  |   function ToEuler(M00, M10, M20, M21, M22)  | ||
| Line 40: | Line 97: | ||
  	    end if  |   	    end if  | ||
              Z = -Atan2(s, c)  |               Z = -Atan2(s, c)  | ||
              Y = Atan2(M20, r)  |               Y = Atan2(M20, r)  | ||
| Line 52: | Line 109: | ||
  end function  |   end function  | ||
 ' ################################  | |||
 set RotMat = XSIMath.CreateMatrix3( _  | |||
 		0.25, 0.808012701892219, 0.53349364905389, _  | |||
 		-0.433012701892219, -0.399519052838329, 0.808012701892219, _  | |||
 		0.866025403784439, -0.433012701892219, 0.25 )  | |||
  ' convert matrix to euler rotation and store values to array  | |||
  ReXYZ = ToEuler(RotMat(0,0), RotMat(1,0), RotMat(2,0), RotMat(2,1), RotMat(2,2))  | |||
  ' convert matrix to   | |||
  ReXYZ = ToEuler(  | |||
  logmessage "reconverted"  |   logmessage "reconverted"  | ||
| Line 110: | Line 123: | ||
  logmessage ReXYZ(1)  |   logmessage ReXYZ(1)  | ||
  logmessage ReXYZ(2)  |   logmessage ReXYZ(2)  | ||
  ' INFO : 60  |   ' INFO : 60  | ||
  ' INFO : 60  |   ' INFO : 60  | ||
  ' INFO : 60  |   ' INFO : 60  | ||
====euler rotation -> quaternion====  | |||
 dim x, y, z, dRotation, qRotation  | |||
 x = 90  | |||
 y = 0  | |||
 z = 0  | |||
 set dRotation = XSIMath.CreateRotation(XSIMath.DegreesToRadians(x), XSIMath.DegreesToRadians(y), XSIMath.DegreesToRadians(z))   | |||
 set qRotation = XSIMath.CreateQuaternion()   | |||
 	dRotation.GetQuaternion (qRotation)   | |||
 	LogMessage qRotation.W  | |||
 	LogMessage qRotation.X  | |||
 	LogMessage qRotation.Y  | |||
 	LogMessage qRotation.Z  | |||
 	' INFO : 0,707106781186548  | |||
 	' INFO : 0,707106781186547  | |||
 	' INFO : 0  | |||
 	' INFO : 0  | |||
====quaternion -> euler rotation====  | |||
 dim qW, qX, qY, qZ, qRotation, x, y, z  | |||
 	qW = 0.707106781186548  | |||
 	qX = 0.707106781186547  | |||
 	qY = 0  | |||
 	qZ = 0  | |||
 set qRotation = XSIMath.CreateQuaternion (qW, qX , qY, qZ)  | |||
 	qRotation.GetXYZAngleValues x, y, z  | |||
 	logmessage XSIMath.RadiansToDegrees(x)  | |||
 	logmessage XSIMath.RadiansToDegrees(y)  | |||
 	logmessage XSIMath.RadiansToDegrees(z)  | |||
 	' INFO : 89,9999999999999  | |||
 	' INFO : 0  | |||
 	' INFO : 0  | |||
edits