与轴对齐矩形相交的四边形?

时间:2015-03-05 20:56:39

标签: algorithm computational-geometry line-intersection convex-polygon

如果一个轴对齐的矩形R,一个如何有效地测试 相交一个很好的四边形Q?

  • 尼斯的意思是:Q是凸的(不是雪佛龙)和非自相感的(不是领结,不是退化)。
  • 只是2D。
  • 只是/不。我不需要实际的交叉区域。
  • 编辑:Q和R可能会打开或关闭,无论方便。

显然,可以测试Q的每个边缘是否与R相交。 这减少了问题 How to test if a line segment intersects an axis-aligned rectange in 2D?

但就像R-Barsky所利用的R&轴对齐性一样 比Cohen-Sutherland更快, Q的属性可能被利用来获得比运行Liang-Barsky多次更快的东西。

因此,多边形 - 矩形交叉算法 Sutherland-Hodgman,Vatti和Greiner-Hormann,所有这些都让Q变得非凸,不太可能是最优的。

Area of rectangle-rectangle intersection看起来很有希望,尽管它没有利用R的轴对齐性。

2 个答案:

答案 0 :(得分:2)

小心不要忽略Q完全覆盖R的情况,反之亦然,因为边缘测试会给出假阴性。

概念上的一种方法:

  • 将R视为两个轴对齐无限带的交点,垂直带[x0,x1]和水平带[y0,y1]。
  • 设xmin和xmax表示Q与水平带[y0,y1]的交点范围;如果[xmin,xmax]∩[x0,x1]非空,则Q与R相交。

在实施方面:

  1. 初始化xmin:= + inf; xmax:= -inf
  2. 对于Q的每个边 pq p =(px,py) q =(qx,qy), py≥qy:

    一个。如果qy> y1或y0> py,忽略这个边缘,检查下一个边缘。

    湾如果py> y1,let(x,y1)是 pq 与水平线y = y1的交点;否则让x为px。

    ℃。更新xmin = min(xmin,x); xmax = max(xmax,x)。

    d。如果y0> qy,let(x,y0)是 pq 与水平线y = y0的交点;否则让x为qx。

    即更新xmin = min(xmin,x); xmax = max(xmax,x)。

  3. 如果xmin <,则Q与R相交。 x1和xmax> X0

答案 1 :(得分:0)

1)构造Q的轴对齐边界框。测试它是否与R相交。

2)对于Q的每个边E,测试R的所有四个顶点位于E支撑线的外侧。 (使用边缘的隐式方程A.x + B.y + c <> 0。)

当且仅当这些测试中的任何一个成功时,才会有交集。