Ejemplo n.º 1
0
 /// <summary>
 /// Rotates a 3D matrix to a specific angle in a given axis.
 /// </summary>
 public virtual Matrix Rotate(double angle, AngleUnit unit, MatrixAxis axis)
 {
     if (Is3DMatrix == false)
     {
         throw new InvalidOperationException(Properties.Resources.Exception_3DRequired);
     }
     return(new Matrix(MatrixFunctions.Create3DRotationMatrix(angle, unit, axis)));
 }
        /// <summary>
        /// Creates 2-dimensional rotation matrix using the specified angle and axis.
        /// </summary>
        public static double[,] Create3DRotationMatrix(double angle, AngleUnit unit, MatrixAxis axis)
        {
            // sin and cos accept only radians

            double angleRadians = angle;

            if (unit == AngleUnit.Degrees)
            {
                angleRadians = Converters.DegreesToRadians(angleRadians);
            }


            double[,] output = new double[3, 3];

            if (axis == MatrixAxis.X)
            {
                output[0, 0] = 1;
                output[1, 1] = Math.Cos(angleRadians);
                output[2, 1] = Math.Sin(angleRadians);
                output[1, 2] = -1 * Math.Sin(angleRadians);
                output[2, 2] = Math.Cos(angleRadians);
            }
            else if (axis == MatrixAxis.Y)
            {
                output[1, 1] = 1;
                output[0, 0] = Math.Cos(angleRadians);
                output[2, 0] = -1 * Math.Sin(angleRadians);
                output[0, 2] = Math.Sin(angleRadians);
                output[2, 2] = Math.Cos(angleRadians);
            }
            else if (axis == MatrixAxis.Z)
            {
                output[2, 2] = 1;
                output[0, 0] = Math.Cos(angleRadians);
                output[1, 0] = Math.Sin(angleRadians);
                output[0, 1] = -1 * Math.Sin(angleRadians);
                output[1, 1] = Math.Cos(angleRadians);
            }


            return(output);
        }
Ejemplo n.º 3
0
        public static double[,] Create2DReflectionMatrix(MatrixAxis axis)
        {
            if (axis == MatrixAxis.Z)
            {
                throw new InvalidOperationException(Properties.Resources.Exception_InvalidAxis);
            }

            var output = CreateIdentityMatrix(2);

            if (axis == MatrixAxis.X)
            {
                output[1, 1] *= -1;
            }
            else if (axis == MatrixAxis.Y)
            {
                output[0, 0] *= -1;
            }

            return(output);
        }
Ejemplo n.º 4
0
        public static double[,] Create2DShearingMatrix(double factor, MatrixAxis axis)
        {
            if (axis == MatrixAxis.Z)
            {
                throw new InvalidOperationException(Properties.Resources.Exception_InvalidAxis);
            }

            var output = CreateIdentityMatrix(2);

            if (axis == MatrixAxis.X)
            {
                output[0, 1] = factor;
            }

            else if (axis == MatrixAxis.Y)
            {
                output[1, 0] = factor;
            }

            return(output);
        }
Ejemplo n.º 5
0
        public static double[,] Create3DShearingMatrix(double factor, MatrixAxis axis)
        {
            var output = CreateIdentityMatrix(4);

            if (axis == MatrixAxis.X)
            {
                output[1, 0] = factor;
                output[2, 0] = factor;
            }
            else if (axis == MatrixAxis.Y)
            {
                output[0, 1] = factor;
                output[2, 1] = factor;
            }
            else if (axis == MatrixAxis.Z)
            {
                output[0, 2] = factor;
                output[1, 2] = factor;
            }

            return(output);
        }
Ejemplo n.º 6
0
 /// <summary>
 /// Creates 3-dimensional shearing matrix over the specified axis.
 /// </summary>
 public static Matrix Create3DShearingMatrix(double factor, MatrixAxis axis)
 {
     return(new Matrix(MatrixFunctions.Create3DShearingMatrix(factor, axis)));
 }
Ejemplo n.º 7
0
 /// <summary>
 /// Creates 2-dimensional reflection matrix over the specified axis.
 /// </summary>
 public static Matrix Create2DReflectionMatrix(MatrixAxis axis)
 {
     return(new Matrix(MatrixFunctions.Create2DReflectionMatrix(axis)));
 }
Ejemplo n.º 8
0
 /// <summary>
 /// Creates 3-dimensional rotation matrix to the specified angle and direction.
 /// </summary>
 public static Matrix Create3DRotationMatrix(double angle, AngleUnit unit, MatrixAxis axis)
 {
     return(new Matrix(MatrixFunctions.Create3DRotationMatrix(angle, unit, axis)));
 }