我读到了关于交叉矩形的信息:

检测两个矩形交叉的算法?

但是我很难实现它。

如果R1(A,B,C,D)是我的旋转矩形而R2(A',B',C',D')是另一个没有旋转的矩形。

从上面的链接中提取的公式是:

  edge = v(n) - v(n-1)

你可以通过旋转90°和#176来获得与此垂直的垂直方向。在2D中,这很简单:

  rotated.x = -unrotated.y
  rotated.y =  unrotated.x

  // rotated: your rotated edge
  // v(n-1) any point from the edge.
  // testpoint: the point you want to find out which side it's on.

  side = sign (rotated.x * (testpoint.x - v(n-1).x) + 
               rotated.y * (testpoint.y - v(n-1).y);

我的旋转边缘将来自R1

AB(xB-xA,yB-yA)所以旋转x是xB-xA? BC(xC-xB,yC-y1) CD ...... AD ......

测试点将来自R2的A',B',C',D' 因此,我必须检查R2的所有点与R1的4个边缘的结果的符号。 如果相交则进行16次比较。我怎么知道我是否找到了分离边缘?

由于

有帮助吗?

解决方案

如果对于任何给定边缘,任何针对该边缘测试的点积的符号都不匹配,那么您有一个交叉点。点积的符号对于线的一侧的所有点都是相同的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top