如果一个轴对齐的矩形R,一个如何有效地测试 相交一个很好的四边形Q?
显然,可以测试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的轴对齐性。
答案 0 :(得分:2)
小心不要忽略Q完全覆盖R的情况,反之亦然,因为边缘测试会给出假阴性。
概念上的一种方法:
在实施方面:
对于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)。
如果xmin <,则Q与R相交。 x1和xmax> X0
答案 1 :(得分:0)
1)构造Q的轴对齐边界框。测试它是否与R相交。
2)对于Q的每个边E,测试R的所有四个顶点位于E支撑线的外侧。 (使用边缘的隐式方程A.x + B.y + c <> 0
。)
当且仅当这些测试中的任何一个成功时,才会有交集。