Ejemplo n.º 1
0
        private double EvaluateTriangle(Point3D A, Point3D B, Point3D C)
        {
            double result = 0.0;

            if ((A.ScaledTo(mWhiteRadius) - B.ScaledTo(mWhiteRadius)).R < SLS_RESOLUTION)
            {
                //BASE CASE
                Point3D center = (A+B+C) / 3.0;
                result = center.R - target(A + B + C);
                result = -Math.Abs(result);
            }
            else
            {
                //RECURSION STEP
                Point3D AB = (A + B) * 0.5;
                Point3D BC = (B + C) * 0.5;
                Point3D AC = (A + C) * 0.5;

                result += Math.Abs(EvaluateTriangle(A, AB, AC));
                result += Math.Abs(EvaluateTriangle(B, AB, BC));
                result += Math.Abs(EvaluateTriangle(C, BC, AC));
                result += Math.Abs(EvaluateTriangle(AB, AC, BC));
            }

            return result;
        }