Esempio n. 1
0
        /// <summary>
        /// Creates a 3D Z-rotation matrix.
        /// </summary>
        /// <remarks>For a right-handed 3D system (like WPF), a positive angle value results in a counter-clockwise rotation around the axis. For a left-handed 3D system, a positive angle value results in a clockwise rotation around the axis.</remarks>
        /// <param name="angle">Angle value in degree.</param>
        /// <param name="handedness">The handedness of the coordinate system (optional). Under WPF, the defaut value is Right-handed.</param>
        /// <returns>A Matrix3D object.</returns>
        public static Matrix3D GetZRotationMatrix(double angle, Handedness3D handedness = Handedness3D.RightHanded)
        {
            //var m = new Matrix3D();
            //m.Rotate(new Quaternion(new Vector3D(0, 0, 1), angle));
            //return m;

            // var radianAngle = GeometryHelper.DegreeToRadian(angle);
            double radianAngle = 0.0;

            if (handedness == Handedness3D.LeftHanded)
            {
                radianAngle = (2 * Math.PI) - GeometryHelper.DegreeToRadian(angle);
            }
            else
            {
                radianAngle = GeometryHelper.DegreeToRadian(angle);
            }
            return(new Matrix3D
            {
                M11 = Math.Cos(radianAngle), M21 = -Math.Sin(radianAngle),
                M12 = Math.Sin(radianAngle), M22 = Math.Cos(radianAngle)
            });
        }
Esempio n. 2
0
        /// <summary>
        /// Creates a 3D Y-rotation matrix.
        /// </summary>
        /// <remarks>For a left-handed 3D system (the default in Silverlight projections), a positive angle value results in a clockwise rotation around the axis. For a right-handed 3D system, a positive angle value results in a counter-clockwise rotation around the axis.</remarks>
        /// <param name="angle">Angle value in degree.</param>
        /// <param name="handedness">The handedness of the coordinate system (optional). Under Silverlight, the defaut value is Left-handed.</param>
        /// <returns>A Matrix3D object.</returns>
        public static Matrix3D GetYRotationMatrix(double angle, Handedness3D handedness = Handedness3D.LeftHanded)
        {
            //var m = new Matrix3D();
            //m.Rotate(new Quaternion(new Vector3D(0, 1, 0), angle));
            //return m;

            double radianAngle = 0.0;

            // angle inverted in respect to the relative orientation of Z to X
            if (handedness == Handedness3D.LeftHanded)
            {
                radianAngle = GeometryHelper.DegreeToRadian(angle);
            }
            else
            {
                radianAngle = (2 * Math.PI) - GeometryHelper.DegreeToRadian(angle);
            }
            return(new Matrix3D
            {
                M11 = Math.Cos(radianAngle), M31 = -Math.Sin(radianAngle),
                M13 = Math.Sin(radianAngle), M33 = Math.Cos(radianAngle)
            });
        }