/// <summary> /// Takes the current plane as a matrix and returns a rotated version /// </summary> /// <param name="basisMatrix"></param> /// <param name="radians"></param> /// <returns></returns> public static DWMatrix RotateNRadiansAntiClockwise(DWMatrix basisMatrix, double radians) { double ix = basisMatrix.IX * Math.Cos(radians) - basisMatrix.IY * Math.Sin(radians); double iy = basisMatrix.IX * Math.Sin(radians) + basisMatrix.IY * Math.Cos(radians); double jx = basisMatrix.JX * Math.Cos(radians) - basisMatrix.JY * Math.Sin(radians); double jy = basisMatrix.JX * Math.Sin(radians) + basisMatrix.JY * Math.Cos(radians); return(new DWMatrix(ix, iy, jx, jy)); }
/// <summary> /// Uses matrix multiplication on a transformation matrix and the current plane /// </summary> /// <param name="transformMatrix">The wanted transformation</param> /// <param name="basisMatrix">The basis vectors in a matrix (i-hat & j-hat)</param> /// <returns>A new matrix giving the new basis vectors</returns> public static DWMatrix MakeLinearTransformation(DWMatrix transformMatrix, DWMatrix basisMatrix) { double ix = basisMatrix.IX * transformMatrix.IX + basisMatrix.IY * transformMatrix.JX; double iy = basisMatrix.IX * transformMatrix.IY + basisMatrix.IY * transformMatrix.JY; double jx = basisMatrix.JX * transformMatrix.IX + basisMatrix.JY * transformMatrix.JX; double jy = basisMatrix.JX * transformMatrix.IY + basisMatrix.JY * transformMatrix.JY; return(new DWMatrix(ix, iy, jx, jy)); }
/// <summary> /// Get the inverse matrix of a given matrix /// </summary> /// <param name="m"></param> /// <returns>The inverse DWMatrix</returns> public static DWMatrix GetInverseMatrix(DWMatrix m) { double ix = m.JY; double iy = -m.IY; double jx = -m.JX; double jy = m.IX; DWMatrix newMatrix = new DWMatrix(ix, iy, jx, jy); return(newMatrix / GetDeterminant(newMatrix)); }
/// <summary> /// Gets the determinant value of a given matrix /// </summary> /// <param name="m"></param> /// <returns>The determinant value of a matrix</returns> public static double GetDeterminant(DWMatrix m) => (m.IX * m.JY) - (m.JX * m.IY);