旋转2d矩形相交点或区域

时间:2010-08-16 05:40:54

标签: c++ objective-c graphics geometry

previous question开始。我有两个矩形,它们看起来像这样:

struct Rect
{
 NSPoint topLeft; 
 NSPoint topRight; 
 NSPoint bottomLeft; 
 NSPoint bottomRight; 
}

我使用something similar code来检查矩形是否相交(或碰撞)。在如果2个矩形相交的情况下,我想计算第一个矩形中的交叉区域或第二个矩形与第一个矩形相交的点(即交叉点坐标)。

如何计算交叉点或交叉区域。

2 个答案:

答案 0 :(得分:2)

您可以通过以下方式确定交叉点:

foreach line in rectangle 1: line1
  foreach line in rectangle 2: line2
    find point of intersection for line1, line2

找到两条线的交点:

http://local.wasp.uwa.edu.au/~pbourke/geometry/lineline2d/

您可以通过查找交点来找到交叉区域,并根据该区域分割线以创建新的边/删除边。您可以在生成的多边形中获得最多8个点,或者最少3个点(不包括退化情况)。

不,我没有说这是最有效的方法,但它会起作用:)

答案 1 :(得分:2)

您所询问的似乎是“多边形交叉点”的特定情况。 (因为矩形是多边形)。

这是一个执行此操作的库:

http://www.cs.man.ac.uk/aig/staff/alan/software/

也许它可以帮助(他们以某种方式谈论算法)。但是,如果您只需要矩形交叉,则可以简化它。

另外,也许你可以看一下这个问题:

Algorithm to detect intersection of two rectangles?