math - 如何检测所有被n条线段包围的区域?

标签 math geometry triangular

当你在二维平面上绘制3条线段时,它可能会组成一个三角形。

如何找到由 n 条线段生成的所有多边形?我可以使用任何有效的算法吗?

输入:每个线段的第一个和最后一个点坐标(例如点 A=(x_A,y_A), B=(x_B,y_B), ... , I=(x_I,y_I))

lines

输出:所有生成的多边形和生成的线集(例如。{A,B,C,F},{A,C,E,F,H},{E,F,I},{E,F,我,H},{G,H,我})

polygons produced by given lines

最佳答案

我找到了答案。

第 1 步。计算每条线段的所有交点。

引用“How do you detect where two line segments intersect?”,计算给定线段的所有交点。它是 O(n^2),但可以通过使用空间树(例如 R-Tree、四叉树)升级到 O(n log n)。

enter image description here

第 2 步。找到所有逆时针循环。

引用“small cycle finding in a planar graph”,计算每个顶点的连接边角度,并排序。完成后,遍历每条边,通过“转向最左边”策略找到所有环。

这会找到所有循环,但也会找到不需要的外部循环。外层循环是顺时针的,其他循环都是逆时针的,所以用“How to determine if a list of polygon points are in clockwise order?”中写的方法去掉顺时针循环。

enter image description here

关于math - 如何检测所有被n条线段包围的区域?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35456877/

相关文章:

c++ - 特征矩阵的下三角

javascript - 你如何使用 JavaScript 在 QtQuick Qml 中进行大量数学运算

python - 使用 Python,如何判断矩形和形状是否重叠?

function - 纬度/经度 + 距离 + 航向 --> 纬度/经度

java - 三角形未在 OSX 上的 OpenGL 2.1 中绘制

algorithm - 给定三角形 3 条边的长度,计算边中点之间的平均距离

r - 如何有效生成对称矩阵的下三角索引

c++ - 计算从 L 到 R 的乘积除数

java - 数学帮助 - 无法旋转某些东西(了解 Java 会更好)

java - 没有平方根的归一化空间 vector