Converts a quaternion (w, x, y, z) to a rotation matrix. - Android java.lang

Android examples for java.lang:Math Matrix

Description

Converts a quaternion (w, x, y, z) to a rotation matrix.

Demo Code

/*// w ww. ja  v a 2  s. c  o  m
 * Copyright 2012 Dan Mercer
 * 
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *     http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
//package com.java2s;

public class Main {
    /**
     * Converts a quaternion (w, x, y, z) to a rotation matrix.
     * 
     * @param m The float array that holds matrix to rotate
     * @param mOffset The offset into <code>m</code> where the matrix starts
     * @param w The w-component of the quaternion
     * @param x The x-component of the quaternion
     * @param y The y-component of the quaternion
     * @param z The z-component of the quaternion
     */
    public static void setRotateQuaternionM(float[] m, int mOffset,
            float w, float x, float y, float z) {

        if (m.length < mOffset + 16) {
            throw new IllegalArgumentException("m.length < mOffset + 16");
        }

        final float xx = x * x, yy = y * y, zz = z * z;
        final float xy = x * y, yz = y * z, xz = x * z;
        final float xw = x * w, yw = y * w, zw = z * w;

        m[mOffset + 0] = 1 - 2 * yy - 2 * zz;
        m[mOffset + 1] = 2 * xy + 2 * zw;
        m[mOffset + 2] = 2 * xz - 2 * yw;
        m[mOffset + 3] = 0;

        m[mOffset + 4] = 2 * xy - 2 * zw;
        m[mOffset + 5] = 1 - 2 * xx - 2 * zz;
        m[mOffset + 6] = 2 * yz + 2 * xw;
        m[mOffset + 7] = 0;

        m[mOffset + 8] = 2 * xz + 2 * yw;
        m[mOffset + 9] = 2 * yz - 2 * xw;
        m[mOffset + 10] = 1 - 2 * xx - 2 * yy;
        m[mOffset + 11] = 0;

        m[mOffset + 12] = 0;
        m[mOffset + 13] = 0;
        m[mOffset + 14] = 0;
        m[mOffset + 15] = 1;
    }
}

Related Tutorials