我正在使用CGAL库从简单多边形P中的点p计算可见性多边形,其中p在P的边界内。 我使用的是“ Simple_polygon_visibility_2”类,计算可见性多边形时,结果似乎是错误的。我在附件中同时发送了多边形P和生成的可见性多边形。 在此示例中,我有兴趣从标记为“ 7”的顶点中找到可见性多边形。如您所见,生成的可见性多边形的边缘从“ 4”到“ 5”(因此,三角形“ 7-4-5”)无效,因为该三角形不是P的一部分。>
我已经阅读了乔和辛普森的论文,他们提到:
“对于边界视点z,我们将P的顶点定向为 逆时针排序并将其标记为z,v_0,v_1,...,v_ {n-1},v_n 和z,其中v_0是z的后继顶点,而v_n是 z的前顶点。我们还假设坐标系是 平移和旋转,以使z位于原点,而v_0位于 正x轴”
我认为这可能是问题所在,因为我不确定CGAL的实现是否测试查询点是否在边界上,如果是,则将其视为特殊情况。 如果是这样,我是否必须事先进行平移/旋转?
答案 0 :(得分:1)
实际上,这是我的错误。由于该点在边界内,因此它既不属于内表面也不属于外部面(当排列是简单多边形时)。因此,我应该使用包含查询点的半边沿作为参数的方法,而不是使用此版本的“ compute_visibility”方法。在这种情况下,它会按预期工作。