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); }