8,452
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