/** * Converts {@link FMatrixRMaj} into {@link FMatrix4} * * @param input Input matrix. * @param output Output matrix. If null a new matrix will be declared. * @return Converted matrix. */ public static FMatrix4 convert(FMatrixRMaj input, FMatrix4 output) { if (output == null) { output = new FMatrix4(); } if (input.getNumRows() != 1 && input.getNumCols() != 1) { throw new ArgumentException("One row or column must have a length of 1 for it to be a vector"); } int length = Math.Max(input.getNumRows(), input.getNumCols()); if (length != 4) { throw new ArgumentException("Length of input vector is not 4. It is " + length); } output.a1 = input.data[0]; output.a2 = input.data[1]; output.a3 = input.data[2]; output.a4 = input.data[3]; return(output); }
public static float normF(FMatrix4 M) { float scale = CommonOps_FDF4.elementMaxAbs(M); if (scale == 0.0f) { return(0.0f); } float a1 = M.a1 / scale, a2 = M.a2 / scale, a3 = M.a3 / scale, a4 = M.a4 / scale; float sum = a1 * a1 + a2 * a2 + a3 * a3 + a4 * a4; return(scale * (float)Math.Sqrt(sum)); }
public static bool isIdentical(FMatrix4 a, FMatrix4 b, float tol) { if (!MatrixFeatures_FDRM.isIdentical(a.a1, b.a1, tol)) { return(false); } if (!MatrixFeatures_FDRM.isIdentical(a.a2, b.a2, tol)) { return(false); } if (!MatrixFeatures_FDRM.isIdentical(a.a3, b.a3, tol)) { return(false); } if (!MatrixFeatures_FDRM.isIdentical(a.a4, b.a4, tol)) { return(false); } return(true); }
public static bool hasUncountable(FMatrix4 a) { if (UtilEjml.isUncountable(a.a1)) { return(true); } if (UtilEjml.isUncountable(a.a2)) { return(true); } if (UtilEjml.isUncountable(a.a3)) { return(true); } if (UtilEjml.isUncountable(a.a4)) { return(true); } return(false); }
public static float fastNormF(FMatrix4 M) { float sum = M.a1 * M.a1 + M.a2 * M.a2 + M.a3 * M.a3 + M.a4 * M.a4; return((float)Math.Sqrt(sum)); }
public static void normalizeF(FMatrix4 M) { float val = normF(M); CommonOps_FDF4.divide(M, val); }