computational-geometry - 从边界中的一点计算可见性多边形
问题描述
我正在使用 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 的实现是否测试查询点是否在边界上,如果是,则将其视为特例。如果是这样,我是否必须先验地进行这种平移/旋转?
解决方案
其实,这是我的错。由于该点位于边界中,因此它既不属于内部面也不属于外部面(当排列是简单多边形时)。因此,我应该使用包含查询点的半边作为参数的方法,而不是使用此版本的“compute_visibility”方法。在这种情况下,它按预期工作。
推荐阅读
- ruby-on-rails - Rails / Ruby方法/正则表达式增加字符串的数字部分?
- go - 总是去获取一个预发布版本
- python - 每次循环运行时在 Django 模板中显示值
- java - 如何查找和使用每个 Java 支持的平台默认字符集?
- android - 无法在 Android Studio 中找到 adb
- python - 如何使用 argparse 在控制台中执行多个参数?
- git - 稀疏结帐但排除或忽略根目录中的文件?
- mysql - 如何获取数据加入 Django Rest 框架
- mysql - 使用现有的 Persistence Volume Claim 部署 bitnami/mysql helm chart
- wordpress - 添加用户角色编辑器插件后,wordpress 站点管理员用户不显示 woocommerce 设置访问权限