Example #1
0
        /// <summary>
        /// Extract a point that represents the scale associated with each row
        /// </summary>
        /// <returns></returns>
        public Vector3D        ExtractScale()
        {
            Matrix3D mTemp = new Matrix3D(this);

            // undo translation
            mTemp._elements[12] = 0;
            mTemp._elements[13] = 0;
            mTemp._elements[14] = 0;

            // undo rotation
            Quaternion quat        = Quaternion.FromTransform(this);
            Quaternion quatInverse = quat.GetInverse();

            mTemp.Rotate(quatInverse);

            // all that's left is scale?
            return(Vector3D.FromXYZ(mTemp._elements[0], mTemp._elements[5], mTemp._elements[10]));
        }
Example #2
0
 /// <summary>
 /// Extract a quaternion that represents the matrix' current rotation
 /// </summary>
 /// <returns></returns>
 public Quaternion      ExtractRotation()
 {
     return(Quaternion.FromTransform(this));
 }
Example #3
0
        // ================================================================================

        /// <summary>
        /// Extract the matrix' current rotation as an axis and a rotation
        /// </summary>
        /// <param name="axis"></param>
        /// <param name="radians"></param>
        public void    ExtractAxisAngle(out Vector3D axis, out float radians)
        {
            Quaternion quat = Quaternion.FromTransform(this);

            quat.GetAxisAngle(out axis, out radians);
        }