Example #1
0
        private static Vec3Float LUV_XYZ(Vec3Float tuple)
        {
            float L, U, V, X, Y, Z, varU, varV, varY;

            L = tuple.Item0;
            U = tuple.Item1;
            V = tuple.Item2;

            if (L == 0)
            {
                tuple.Item2 = tuple.Item1 = tuple.Item0 = 0.0f;
                return(tuple);
            }

            varY = f_inv((L + 16) / 116.0f);
            varU = U / (13.0f * L) + refU;
            varV = V / (13.0f * L) + refV;
            Y    = varY * refY;
            X    = 0 - (9 * Y * varU) / ((varU - 4.0f) * varV - varU * varV);
            Z    = (9 * Y - (15 * varV * Y) - (varV * X)) / (3.0f * varV);

            tuple.Item0 = X;
            tuple.Item1 = Y;
            tuple.Item2 = Z;

            return(tuple);
        }
Example #2
0
        private static Vec3Float rgbPrepare(Vec3Float tuple)
        {
            int i;

            for (i = 0; i < 3; ++i)
            {
                tuple[i] = round(tuple[i], 3);

                if (tuple[i] < 0 || tuple[i] > 1)
                {
                    if (tuple[i] < 0)
                    {
                        tuple[i] = 0;
                    }
                    else
                    {
                        tuple[i] = 1;
                    }
                    //System.out.println("Illegal rgb value: " + tuple[i]);
                }

                tuple[i] = round(tuple[i] * 255, 0);
            }

            return(tuple);
        }
Example #3
0
 public TrapLoad(int elementIdx, Vec3Float locationStart, Vec3Float locationEnd, Vec3Float loadStart, Vec3Float loadEnd)
 {
     ElementIdx    = elementIdx;
     LocationStart = locationStart;
     LocationEnd   = locationEnd;
     LoadStart     = loadStart;
     LoadEnd       = loadEnd;
 }
Example #4
0
 public static bool IsZeroVector(Vec3Float vec3)
 {
     if (IsDoubleZero(vec3.X) && IsDoubleZero(vec3.Y) && IsDoubleZero(vec3.Z))
     {
         return(true);
     }
     return(false);
 }
Example #5
0
        private static float dotProduct(Vec3Float a, Vec3Float b, int len)
        {
            int   i, _i, _ref;
            float ret = 0.0f;

            for (i = _i = 0, _ref = len - 1; 0 <= _ref ? _i <= _ref : _i >= _ref; i = 0 <= _ref ? ++_i : --_i)
            {
                ret += a[i] * b[i];
            }
            return(ret);
        }
Example #6
0
        private static Vec3Float XYZ_RGB(Vec3Float tuple)
        {
            float B, G, R;

            R = fromLinear(dotProduct(m[0], tuple, 3));
            G = fromLinear(dotProduct(m[1], tuple, 3));
            B = fromLinear(dotProduct(m[2], tuple, 3));

            tuple.Item0 = R;
            tuple.Item1 = G;
            tuple.Item2 = B;

            return(tuple);
        }
Example #7
0
        private static Vec3Float LCH_HUSL(Vec3Float tuple)
        {
            float C, H, L, S, max;

            L = tuple.Item0;
            C = tuple.Item1;
            H = tuple.Item2;

            max = maxChroma(L, H);
            S   = C / max * 100;

            tuple.Item0 = H / 360;
            tuple.Item1 = S / 100;
            tuple.Item2 = L / 100;

            return(tuple);
        }
Example #8
0
        private static Vec3Float HUSL_LCH(Vec3Float tuple)
        {
            float C, H, L, S, max;

            H = tuple.Item0;
            S = tuple.Item1;
            L = tuple.Item2;

            max = maxChroma(L, H);
            C   = max / 100.0f * S;

            tuple.Item0 = L;
            tuple.Item1 = C;
            tuple.Item2 = H;

            return(tuple);
        }
Example #9
0
        private static Vec3Float LCH_LUV(Vec3Float tuple)
        {
            float C, H, Hrad, L, U, V;

            L = tuple.Item0;
            C = tuple.Item1;
            H = tuple.Item2;

            Hrad = (float)(H / 360.0 * 2.0 * PI);
            U    = (float)(Math.Cos(Hrad) * C);
            V    = (float)(Math.Sin(Hrad) * C);

            tuple.Item0 = L;
            tuple.Item1 = U;
            tuple.Item2 = V;

            return(tuple);
        }
Example #10
0
        private static Vec3Float XYZ_LUV(Vec3Float tuple)
        {
            float L, U, V, X, Y, Z, varU, varV;

            X = tuple.Item0;
            Y = tuple.Item1;
            Z = tuple.Item2;

            varU = (4 * X) / (X + (15.0f * Y) + (3 * Z));
            varV = (9 * Y) / (X + (15.0f * Y) + (3 * Z));
            L    = 116 * f(Y / refY) - 16;
            U    = 13 * L * (varU - refU);
            V    = 13 * L * (varV - refV);

            tuple.Item0 = L;
            tuple.Item1 = U;
            tuple.Item2 = V;

            return(tuple);
        }
Example #11
0
        private static Vec3Float LUV_LCH(Vec3Float tuple)
        {
            float C, H, Hrad, L, U, V;

            L = tuple.Item0;
            U = tuple.Item1;
            V = tuple.Item2;

            C    = (float)(Math.Pow(Math.Pow(U, 2) + Math.Pow(V, 2), (1 / 2.0f)));
            Hrad = (float)(Math.Atan2(V, U));
            H    = (float)(Hrad * 360.0f / 2.0f / PI);
            if (H < 0)
            {
                H = 360 + H;
            }

            tuple.Item0 = L;
            tuple.Item1 = C;
            tuple.Item2 = H;

            return(tuple);
        }
Example #12
0
        private static Vec3Float RGB_XYZ(Vec3Float tuple)
        {
            float     B, G, R, X, Y, Z;
            Vec3Float rgbl;

            R = tuple.Item0;
            G = tuple.Item1;
            B = tuple.Item2;

            rgbl.Item0 = toLinear(R);
            rgbl.Item1 = toLinear(G);
            rgbl.Item2 = toLinear(B);

            X = dotProduct(m_inv[0], rgbl, 3);
            Y = dotProduct(m_inv[1], rgbl, 3);
            Z = dotProduct(m_inv[2], rgbl, 3);

            tuple.Item0 = X;
            tuple.Item1 = Y;
            tuple.Item2 = Z;

            return(tuple);
        }
Example #13
0
 public UniformLoad(int elementIdx, Vec3Float load)
 {
     ElementIdx = elementIdx;
     Load       = load;
 }
Example #14
0
 public static double CalculateSQDistance(Vec3Float nodePosition1, Vec3Float nodePosition2)
 {
     return(Math.Sqrt((Math.Pow(nodePosition1.X - nodePosition2.X, 2) + Math.Pow(nodePosition1.Y - nodePosition2.Y, 2) + Math.Pow(
                           nodePosition1.Z - nodePosition2.Z, 2))));
 }