public static void QuaternionAngles(SourceQuaternion q, ref SourceRadianEuler angles) { // FIXME: doing it this way calculates too much data, needs to do an optimized version... SourceMatrix3x4 matrix = new SourceMatrix3x4(); QuaternionMatrix(q, ref matrix); MatrixAngles(matrix, ref angles); }
public SourceQuaternion(SourceRadianEuler angle) { var t = new SourceQuaternion(); MathUtils.AngleQuaternion(angle, ref t); this.x = t.x; this.y = t.y; this.z = t.z; this.w = t.w; }
public SourceQuaternion(SourceDegreeEuler angle) { SourceRadianEuler radians = new SourceRadianEuler(angle); var t = new SourceQuaternion(); MathUtils.AngleQuaternion(radians, ref t); this.x = t.x; this.y = t.y; this.z = t.z; this.w = t.w; }
public static void MatrixAngles(SourceMatrix3x4 matrix, ref SourceRadianEuler angles) { float[] a = new float[3]; for (int i = 0; i < 3; i++) { a[i] = angles[i]; } MatrixAngles(matrix, ref a); for (int i = 0; i < 3; i++) { angles[i] = a[i]; } }
public static void AngleQuaternion(SourceRadianEuler angles, ref SourceQuaternion outQuat) { float sr, sp, sy, cr, cp, cy; SinCos(angles.z * 0.5f, out sy, out cy); SinCos(angles.y * 0.5f, out sp, out cp); SinCos(angles.x * 0.5f, out sr, out cr); // NJS: for some reason VC6 wasn't recognizing the common subexpressions: float srXcp = sr * cp, crXsp = cr * sp; outQuat.x = srXcp * cy - crXsp * sy; // X outQuat.y = crXsp * cy + srXcp * sy; // Y float crXcp = cr * cp, srXsp = sr * sp; outQuat.z = crXcp * sy - srXsp * cy; // Z outQuat.w = crXcp * cy + srXsp * sy; // W (real component) }
public static void AngleMatrix(SourceRadianEuler angles, ref SourceMatrix3x4 matrix) { SourceQAngle quakeEuler = new SourceQAngle(RAD2DEG(angles.y), RAD2DEG(angles.z), RAD2DEG(angles.x)); AngleMatrix(quakeEuler, ref matrix); }
public static void AngleMatrix(SourceRadianEuler angles, SourceVector position, ref SourceMatrix3x4 matrix) { AngleMatrix(angles, ref matrix); MatrixSetColumn(position, 3, ref matrix); }
public SourceDegreeEuler(SourceRadianEuler angles) { Init(MathUtils.RAD2DEG(angles.x), MathUtils.RAD2DEG(angles.y), MathUtils.RAD2DEG(angles.z)); }
public SourceDegreeEuler(SourceQuaternion q) { SourceRadianEuler radians = new SourceRadianEuler(q); Init(MathUtils.RAD2DEG(radians.x), MathUtils.RAD2DEG(radians.y), MathUtils.RAD2DEG(radians.z)); }