Beispiel #1
0
        static Vector2?PolygonClosestIntersection(Polygon2 poly, Vector2 startPoint, Vector2 endPoint)
        {
            float   distance = 1000000000;
            Vector2?result   = null;

            for (int i = 0; i < poly.points.Length; i++)
            {
                Vector2 pa = poly.points[i];
                Vector2 pb = poly.points[(i + 1) % poly.points.Length];

                pairA.A.x = startPoint.x;
                pairA.A.y = startPoint.y;
                pairA.B.x = endPoint.x;
                pairA.B.y = endPoint.y;

                pairB.A.x = pa.x;
                pairB.A.y = pa.y;
                pairB.B.x = pb.x;
                pairB.B.y = pb.y;

                Vector2?intersection = Math2D.GetPointLineIntersectLine2(pairA, pairB);

                if (intersection != null)
                {
                    float d = Vector2.Distance(intersection.Value, startPoint);

                    if (result != null)
                    {
                        if (d < distance)
                        {
                            result = intersection.Value;
                            d      = distance;
                        }
                    }
                    else
                    {
                        result   = intersection.Value;
                        distance = d;
                    }
                }
            }

            return(result);
        }