/**
         * 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);
        }
Beispiel #2
0
        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);
 }
Beispiel #5
0
        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));
        }
Beispiel #6
0
        public static void normalizeF(FMatrix4 M)
        {
            float val = normF(M);

            CommonOps_FDF4.divide(M, val);
        }