Avast有其他程序员!
我有以下问题:
我有两个重叠的矩形,如下图所示。
我想找出由点ABCDEF组成的多边形。
备用圣诞节描述:红色饼干切割器正在切掉一些黑色饼干。我想计算黑色饼干。
每个矩形是一个具有4个2d顶点的数据结构。
实现这一目标的最佳算法是什么?
答案 0 :(得分:5)
这是一般2D多边形裁剪的特例。一个好的起点是Weiler-Atherton算法。 Wikipedia has a summary和links to the original paper。该算法似乎与您描述的数据结构非常匹配。
请注意,你最终可能会得到一个带孔的矩形(如果红色的那个完全在黑色的内部)或者甚至是两个矩形(例如,如果红色比黑色更高,更瘦) 。如果您确定黑色内部只有一个红色矩形角,那么解决方案应该更加简单。
答案 1 :(得分:2)
答案 2 :(得分:2)
坐标有多精确?如果矩形相当小,最简单的方法可能是在画布上绘制它们,首先是黑色矩形,然后是红色。画布上剩余的黑色像素是左边的多边形。
另一种方法是根据矩形的所有边将坐标网格划分为一堆矩形(不计算无界矩形,如果有两个原始矩形,则最多可生成9个矩形)。然后只测试每个矩形中的代表点,以获得特定多边形的成员资格,以确定哪些矩形在哪些矩形中,哪些矩形在哪里。
答案 3 :(得分:0)
我在这里发现了一些我可以使用的东西:
http://www.cgal.org/Manual/3.3/doc_html/cgal_manual/Boolean_set_operations_2/Chapter_main.html
在我发布这个问题之前,我实际上已经下载了CGAL源代码,但我想我会仔细研究它。