예제 #1
0
        public float DistanceSquaredToLineSegment(Vec2 v, Vec2 w, out Vec2 closestPointOnLineSegment)
        {
            Vec2  vec2_1 = this;
            float num1   = v.DistanceSquared(w);

            if ((double)num1 == 0.0)
            {
                closestPointOnLineSegment = v;
            }
            else
            {
                float num2 = Vec2.DotProduct(vec2_1 - v, w - v) / num1;
                if ((double)num2 < 0.0)
                {
                    closestPointOnLineSegment = v;
                }
                else if ((double)num2 > 1.0)
                {
                    closestPointOnLineSegment = w;
                }
                else
                {
                    Vec2 vec2_2 = v + (w - v) * num2;
                    closestPointOnLineSegment = vec2_2;
                }
            }
            return(vec2_1.DistanceSquared(closestPointOnLineSegment));
        }
예제 #2
0
 public static float DistanceToLineSegmentSquared(Vec2 line1, Vec2 line2, Vec2 point) => point.DistanceSquared(MBMath.GetClosestPointInLineSegmentToPoint(point, line1, line2));