QUATERNIONS_INC_TEMP variable 16 quaternions.inc #declare QUATERNIONS_INC_TEMP = version; QToMatrix macro 19 quaternions.inc #macro QToMatrix(Q) X2 variable 22 quaternions.inc #local X2 = Q.x + Q.x; Y2 variable 23 quaternions.inc #local Y2 = Q.y + Q.y; Z2 variable 24 quaternions.inc #local Z2 = Q.z + Q.z; XX variable 25 quaternions.inc #local XX = Q.x * X2; XY variable 26 quaternions.inc #local XY = Q.x * Y2; XZ variable 27 quaternions.inc #local XZ = Q.x * Z2; YY variable 28 quaternions.inc #local YY = Q.y * Y2; YZ variable 29 quaternions.inc #local YZ = Q.y * Z2; ZZ variable 30 quaternions.inc #local ZZ = Q.z * Z2; TX variable 31 quaternions.inc #local TX = Q.t * X2; TY variable 32 quaternions.inc #local TY = Q.t * Y2; TZ variable 33 quaternions.inc #local TZ = Q.t * Z2; QMatrix macro 37 quaternions.inc #macro QMatrix(Q) M variable 39 quaternions.inc #local M = QToMatrix(Q) QFromMatrix macro 43 quaternions.inc #macro QFromMatrix(M) TR variable 46 quaternions.inc #local TR = M[0].x+M[1].y+M[2].z+1; S variable 48 quaternions.inc #local S=sqrt(TR)*2; R variable 49 quaternions.inc #local R = <(M[1].z-M[2].y)/S,(M[2].x-M[0].z)/S,(M[0].y-M[1].x)/S,0.25*S>; S variable 52 quaternions.inc #local S = sqrt(1+M[0].x-M[1].y-M[2].z) * 2; R variable 53 quaternions.inc #local R = <0.25*S,(M[0].y+M[1].x)/S,(M[2].x+M[0].z)/S,(M[1].z-M[2].y)/S>; S variable 56 quaternions.inc #local S = sqrt(1+M[1].y-M[0].x-M[2].z) * 2; R variable 57 quaternions.inc #local R = <(M[0].y+M[1].x)/S,0.25*S,(M[1].z+M[2].y)/S,(M[2].x-M[0].z)/S>; S variable 59 quaternions.inc #local S = sqrt(1+M[2].z-M[0].x-M[1].y) * 2; R variable 60 quaternions.inc #local R = <(M[2].x+M[0].z)/S,(M[1].z+M[2].y)/S,0.25*S,(M[0].y-M[1].x)/S>; Qsc macro 67 quaternions.inc #macro Qsc(Q) QMagnitude macro 72 quaternions.inc #macro QMagnitude(Q) QNormalize macro 77 quaternions.inc #macro QNormalize(Q) M variable 79 quaternions.inc #local M = QMagnitude(Q); QInverse macro 83 quaternions.inc #macro QInverse(Q) QMultiply macro 88 quaternions.inc #macro QMultiply(Qa, Qb) QRotate macro 97 quaternions.inc #macro QRotate(VAx,An) VAx variable 100 quaternions.inc #local VAx = vnormalize(VAx); QVAxAn macro 104 quaternions.inc #macro QVAxAn(Q,An) An variable 106 quaternions.inc #declare An = acos(Q.t)*2; SA variable 108 quaternions.inc #local SA = sqrt(1-Q.t*Q.t); VAx variable 109 quaternions.inc #local VAx = ; VAx variable 111 quaternions.inc #local VAx = x; // No rotation, I prefer to return x VQRotate macro 116 quaternions.inc #macro VQRotate(V,Q) P variable 118 quaternions.inc #local P = ; R variable 119 quaternions.inc #local R = QMultiply(QMultiply(Q,P),QInverse(Q)); VQARotate macro 124 quaternions.inc #macro VQARotate(V, VAx, An) Q variable 126 quaternions.inc #local Q = QRotate(VAx,An); QDiff macro 130 quaternions.inc #macro QDiff(Qa, Qb) R variable 132 quaternions.inc #local R = QMultiply(Qb,QInverse(Qa)); R variable 134 quaternions.inc #local R = -R; QADiff macro 139 quaternions.inc #macro QADiff(Qa, Qb) An variable 141 quaternions.inc #local An = 0; VAx variable 142 quaternions.inc #local VAx = QVAxAn(QDiff(Qa, Qb),An); QInc macro 146 quaternions.inc #macro QInc(Q,VAn,I) RSL variable 148 quaternions.inc #local RSL = sqrt(VAn.x*VAn.x+VAn.y*VAn.y+VAn.z*VAn.z); RA variable 149 quaternions.inc #local RA = RSL*I; RA variable 151 quaternions.inc #local RA = RA * 0.5; S variable 152 quaternions.inc #local S = sin(RA)/RSL; QI variable 153 quaternions.inc #local QI = ; Q variable 154 quaternions.inc #declare Q = QMultiply(QI,Q); EulerToQ macro 158 quaternions.inc #macro EulerToQ(VAn) cr variable 161 quaternions.inc #local cr = cos(VAn.x/2); cp variable 162 quaternions.inc #local cp = cos(VAn.y/2); cy variable 163 quaternions.inc #local cy = cos(VAn.z/2); sr variable 164 quaternions.inc #local sr = sin(VAn.x/2); sp variable 165 quaternions.inc #local sp = sin(VAn.y/2); sy variable 166 quaternions.inc #local sy = sin(VAn.z/2); cpcy variable 167 quaternions.inc #local cpcy = cp * cy; spsy variable 168 quaternions.inc #local spsy = sp * sy; QToEuler macro 172 quaternions.inc #macro QToEuler(Q) Q2 variable 175 quaternions.inc #local Q2 = Q*Q; Qln macro 181 quaternions.inc #macro Qln(Q) R variable 183 quaternions.inc #local R = sqrt(Q.x*Q.x+Q.y*Q.y+Q.z*Q.z); AT variable 185 quaternions.inc #local AT = atan2(R,Q.t)/R; AT variable 187 quaternions.inc #local AT = 0; QExp macro 192 quaternions.inc #macro QExp(Q) R variable 194 quaternions.inc #local R = sqrt(Q.x*Q.x+Q.y*Q.y+Q.z*Q.z); ET variable 195 quaternions.inc #local ET = exp(Q.t); S variable 197 quaternions.inc #local S = ET*sin(R)/R; S variable 199 quaternions.inc #local S = 0; QLinear macro 204 quaternions.inc #macro QLinear(Qa,Qb,I) QHermite macro 209 quaternions.inc #macro QHermite(Qa,Qb,Qat,Qbt,I) QBezier macro 217 quaternions.inc #macro QBezier(Qa,Qb,Qc,Qd,I) RotSimulXYZ macro 227 quaternions.inc #macro RotSimulXYZ(VAn) VAn variable 231 quaternions.inc #local VAn = ; RL variable 232 quaternions.inc #local RL = sqrt(VAn.x*VAn.x+VAn.y*VAn.y+VAn.z*VAn.z); RA variable 234 quaternions.inc #local RA = RL * 0.5; S variable 235 quaternions.inc #local S = sin(RA)/RL; Q variable 236 quaternions.inc #local Q = ;