Ejemplo n.º 1
0
        // function compute the quaternion product conjg(qA) * qB
        public static fquaternion qconjgAxB(fquaternion qA, fquaternion qB)
        {
            fquaternion qProd;

            qProd.q0 = qA.q0 * qB.q0 + qA.q1 * qB.q1 + qA.q2 * qB.q2 + qA.q3 * qB.q3;
            qProd.q1 = qA.q0 * qB.q1 - qA.q1 * qB.q0 - qA.q2 * qB.q3 + qA.q3 * qB.q2;
            qProd.q2 = qA.q0 * qB.q2 + qA.q1 * qB.q3 - qA.q2 * qB.q0 - qA.q3 * qB.q1;
            qProd.q3 = qA.q0 * qB.q3 - qA.q1 * qB.q2 + qA.q2 * qB.q1 - qA.q3 * qB.q0;

            return(qProd);
        }
        // function compute the quaternion product conjg(qA) * qB
        public static fquaternion qconjgAxB(fquaternion qA, fquaternion qB)
        {
            fquaternion qProd;

            qProd.q0 = qA.q0 * qB.q0 + qA.q1 * qB.q1 + qA.q2 * qB.q2 + qA.q3 * qB.q3;
            qProd.q1 = qA.q0 * qB.q1 - qA.q1 * qB.q0 - qA.q2 * qB.q3 + qA.q3 * qB.q2;
            qProd.q2 = qA.q0 * qB.q2 + qA.q1 * qB.q3 - qA.q2 * qB.q0 - qA.q3 * qB.q1;
            qProd.q3 = qA.q0 * qB.q3 - qA.q1 * qB.q2 + qA.q2 * qB.q1 - qA.q3 * qB.q0;

            return qProd;
        }
Ejemplo n.º 3
0
        // function computes the rotation matrix from an orientation quaternion
        public static void fRotationMatrixFromQuaternion(ref double[,] R, ref fquaternion q)
        {
            double f2q;
            double f2q0q0, f2q0q1, f2q0q2, f2q0q3;
            double f2q1q1, f2q1q2, f2q1q3;
            double f2q2q2, f2q2q3;
            double f2q3q3;

            // calculate products
            f2q    = 2.0F * q.q0;
            f2q0q0 = f2q * q.q0;
            f2q0q1 = f2q * q.q1;
            f2q0q2 = f2q * q.q2;
            f2q0q3 = f2q * q.q3;
            f2q    = 2.0F * q.q1;
            f2q1q1 = f2q * q.q1;
            f2q1q2 = f2q * q.q2;
            f2q1q3 = f2q * q.q3;
            f2q    = 2.0F * q.q2;
            f2q2q2 = f2q * q.q2;
            f2q2q3 = f2q * q.q3;
            f2q3q3 = 2.0F * q.q3 * q.q3;

            // calculate the rotation matrix assuming the quaternion is normalized
            R[X, X] = f2q0q0 + f2q1q1 - 1.0F;
            R[X, Y] = f2q1q2 + f2q0q3;
            R[X, Z] = f2q1q3 - f2q0q2;
            R[Y, X] = f2q1q2 - f2q0q3;
            R[Y, Y] = f2q0q0 + f2q2q2 - 1.0F;
            R[Y, Z] = f2q2q3 + f2q0q1;
            R[Z, X] = f2q1q3 + f2q0q2;
            R[Z, Y] = f2q2q3 - f2q0q1;
            R[Z, Z] = f2q0q0 + f2q3q3 - 1.0F;

            return;
        }
        // function computes the rotation matrix from an orientation quaternion
        public static void fRotationMatrixFromQuaternion(ref double[,] R, ref fquaternion q)
        {
            double f2q;
            double f2q0q0, f2q0q1, f2q0q2, f2q0q3;
            double f2q1q1, f2q1q2, f2q1q3;
            double f2q2q2, f2q2q3;
            double f2q3q3;

            // calculate products
            f2q = 2.0F * q.q0;
            f2q0q0 = f2q * q.q0;
            f2q0q1 = f2q * q.q1;
            f2q0q2 = f2q * q.q2;
            f2q0q3 = f2q * q.q3;
            f2q = 2.0F * q.q1;
            f2q1q1 = f2q * q.q1;
            f2q1q2 = f2q * q.q2;
            f2q1q3 = f2q * q.q3;
            f2q = 2.0F * q.q2;
            f2q2q2 = f2q * q.q2;
            f2q2q3 = f2q * q.q3;
            f2q3q3 = 2.0F * q.q3 * q.q3;

            // calculate the rotation matrix assuming the quaternion is normalized
            R[X, X] = f2q0q0 + f2q1q1 - 1.0F;
            R[X, Y] = f2q1q2 + f2q0q3;
            R[X, Z] = f2q1q3 - f2q0q2;
            R[Y, X] = f2q1q2 - f2q0q3;
            R[Y, Y] = f2q0q0 + f2q2q2 - 1.0F;
            R[Y, Z] = f2q2q3 + f2q0q1;
            R[Z, X] = f2q1q3 + f2q0q2;
            R[Z, Y] = f2q2q3 - f2q0q1;
            R[Z, Z] = f2q0q0 + f2q3q3 - 1.0F;

            return;
        }