TerrainDisplay.Collision.Intersection.ClosestPtPointTriangleNew C# (CSharp) Method

ClosestPtPointTriangleNew() public static method

public static ClosestPtPointTriangleNew ( System.Vector3 p, System.Vector3 a, System.Vector3 b, System.Vector3 c ) : System.Vector3
p System.Vector3
a System.Vector3
b System.Vector3
c System.Vector3
return System.Vector3
        public static Vector3 ClosestPtPointTriangleNew(Vector3 p, Vector3 a, Vector3 b, Vector3 c)
        {
            float num10;
            var vector = b - a;
            var vector2 = c - a;
            var vector3 = p - a;
            var num = Vector3.Dot(vector, vector3);
            var num2 = Vector3.Dot(vector2, vector3);
            if ((num <= 0f) && (num2 <= 0f))
            {
                return a;
            }
            var vector4 = p - b;
            var num3 = Vector3.Dot(vector, vector4);
            var num4 = Vector3.Dot(vector2, vector4);
            if ((num3 >= 0f) && (num4 <= num3))
            {
                return b;
            }
            var num5 = (num * num4) - (num3 * num2);
            if (((num5 <= 0f) && (num >= 0f)) && (num3 <= 0f))
            {
                var num6 = num / (num - num3);
                return (a + ((num6 * vector)));
            }
            var vector5 = p - c;
            var num7 = Vector3.Dot(vector, vector5);
            var num8 = Vector3.Dot(vector2, vector5);
            if ((num8 >= 0f) && (num7 <= num8))
            {
                return c;
            }
            var num9 = (num7 * num2) - (num * num8);
            if (((num9 <= 0f) && (num2 >= 0f)) && (num8 <= 0f))
            {
                num10 = num2 / (num2 - num8);
                return (a + ((num10 * vector2)));
            }
            var num11 = (num3 * num8) - (num7 * num4);
            if (((num11 <= 0f) && ((num4 - num3) >= 0f)) && ((num7 - num8) >= 0f))
            {
                num10 = (num4 - num3) / ((num4 - num3) + (num7 - num8));
                return (b + ((num10 * (c - b))));
            }
            var num12 = 1f / ((num11 + num9) + num5);
            var num13 = num9 * num12;
            var num14 = num5 * num12;
            return ((a + (vector * num13)) + (vector2 * num14));
        }