慕少森
当圆与矩形相交时,只有两种情况:要么圆心位于矩形内,要么矩形的一个边在圆中有一个点。请注意,这并不要求矩形是轴平行的。(一种观察方法是:如果圆中没有一个点(如果所有的边都“在”圆之外),那么圆仍然可以与多边形相交的唯一方法是它完全位于多边形内。)有了这个洞察力,下面这样的东西就能工作了,在那里圆圈有中心。P半径R,而矩形具有顶点。A, B, C, D按照这个顺序(不完整的代码):def intersect(Circle(P, R), Rectangle(A, B, C, D)):
S = Circle(P, R)
return (pointInRectangle(P, Rectangle(A, B, C, D)) or
intersectCircle(S, (A, B)) or
intersectCircle(S, (B, C)) or
intersectCircle(S, (C, D)) or
intersectCircle(S, (D, A)))如果您正在编写任何几何学,您可能已经在您的库中具有上述功能。否则,pointInRectangle()可以通过多种方式实现;多边形点方法可以工作,但对于矩形,只需检查此方法是否有效:0 ≤ AP·AB ≤ AB·AB and 0 ≤ AP·AD ≤ AD·AD和intersectCircle()也很容易实现:一种方法是检查垂直于P到行足够近,并且在端点之间,否则检查终结点。最酷的是同IDEA不仅适用于矩形,而且适用于圆与任意一个圆的交点。简单多边形-甚至不一定是凸的!