Ejemplo n.º 1
0
        public static Vector3 FindClosest(Vector3 p0, Vector3 p1, Vector3 p2, Vector3 p3, Vector3 point, out float distance, int subdivisions = 50)
        {
            float     num      = float.MaxValue;
            Vector3   result   = point;
            Iterator4 iterator = new Iterator4(p0, p1, p2, p3, subdivisions);

            for (int i = 0; i < subdivisions; i++)
            {
                Vector3 current = iterator.Current;
                Vector3 vector  = iterator.Next();
                Vector3 vector2 = vector - current;
                Vector3 lhs     = point - current;
                float   value   = Vector3.Dot(lhs, vector2) / (Vector3.Dot(vector2, vector2) + float.Epsilon);
                Vector3 vector3 = current + Mathf.Clamp(value, 0f, 1f) * vector2;
                float   num2    = Vector3.SqrMagnitude(point - vector3);
                if (num2 < num)
                {
                    num    = num2;
                    result = vector3;
                }
            }
            distance = Mathf.Sqrt(num);
            return(result);
        }
Ejemplo n.º 2
0
    public static Vector3 FindClosest(Vector3 p0, Vector3 p1, Vector3 p2, Vector3 p3, Vector3 point, out float distance, int subdivisions = 50)
    {
        float     num      = 3.40282347E+38f;
        Vector3   result   = point;
        Iterator4 iterator = new Iterator4(p0, p1, p2, p3, subdivisions);

        for (int i = 0; i < subdivisions; i++)
        {
            Vector3 current = iterator.Current;
            Vector3 a       = iterator.Next();
            Vector3 vector  = a - current;
            Vector3 lhs     = point - current;
            float   value   = Vector3.Dot(lhs, vector) / (Vector3.Dot(vector, vector) + 1.401298E-45f);
            Vector3 vector2 = current + Mathf.Clamp(value, 0f, 1f) * vector;
            float   num2    = Vector3.SqrMagnitude(point - vector2);
            if (num2 < num)
            {
                num    = num2;
                result = vector2;
            }
        }
        distance = Mathf.Sqrt(num);
        return(result);
    }