c++ - 计算任意多边形的符号距离变换

标签 c++ c++11 computational-geometry

您将如何计算由任意一组点描述的多边形的符号距离函数。多边形可以是凹的或凸的。假设点存储在逆时针缠绕的 std::vector 中。

Diagram of polygon

更新

让我更具体一点。这不是网格上的采样函数。我需要能够检测沿穿过(不一定相交)多边形绘制的任意线段的符号变化,而无需检查与每个线段的各个交点。问题是,我可能有数千条线段。

谁能想出一个有效的方法来做到这一点?

如果我可以参数化地表达 SDF,我可以计算一个导数来实现这一点。

最佳答案

坏消息:在最坏的情况下,一条线段可以在 N 点与多边形相交,并且所有 M 线段都可能出现这种情况。因此,在最坏的情况下,不可避免地要对片段与侧面进行详尽的比较。这有利于蛮力方法。

幸运的是,输出敏感的解决方案因 N 线段的交点问题而闻名,使用扫掠线方法。复杂度可以降低到 O((N+K) log N)O(N log N + K) 其中 K 是找到的交叉点数。

关于c++ - 计算任意多边形的符号距离变换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41814283/

相关文章:

c++ - 对 __dso_handle_ 的 undefined reference - 在 cygwin 上编译 C++

c++ - 在原始循环上使用 boost::irange 的性能损失

c++ - 使用 Win32 线程模型时,MinGW-w64 是否支持开箱即用的 std::thread?

algorithm - 何时避免曲面重建

c# - 计算 3D 网格的体积

c++ - 如何用不同的值填充数组

c++ - 如何拆分元组?

c++ - 为什么 isnan、isinf 和 isfinite 返回 int 而不是 bool?

C++ - std::enable_if 更多类型

python - Forster-Overfelt 版本的 Greiner-Horman 多边形裁剪算法的伪代码有什么问题?