/// <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); }
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); }
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); }
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); }
/// <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))); }
/// <summary> /// Creates 2-dimensional reflection matrix over the specified axis. /// </summary> public static Matrix Create2DReflectionMatrix(MatrixAxis axis) { return(new Matrix(MatrixFunctions.Create2DReflectionMatrix(axis))); }
/// <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))); }