【问题标题】:Which segments have at least one end inside polygon?哪些线段在多边形内至少有一个端点?
【发布时间】:2020-10-15 16:00:20
【问题描述】:

我有一个问题正在考虑:

It will look something like this

我们有一组线段和一个多边形。找到至少有一个端点在多边形内的线段的算法是什么?

编辑:我们可以假设多边形总是凸的。

Edit2:我想用线段交叉点来解决这个问题,但我真的不知道怎么做。

Edit3:现在我想也许可以尝试使用 Point In Polygon 算法,对吗?我可以暂时忘记段,因为我感兴趣的只是段的末端,它们是点,对吗?所以也许我可以以某种方式检查所有点是否在多边形内。对于其中的这些,我们有答案。

【问题讨论】:

  • 多边形总是凸的吗?
  • 为简单起见,我们可以假设。
  • Point In Polygon 当您只有一个多边形和很多要检查的点时并不好。您需要进行一些预处理才能使用我的答案中的空间数据。

标签: algorithm geometry


【解决方案1】:

将多边形分解为具有两条水平边的梯形(使用通过多边形顶点的水平线)

过滤掉多边形边界框外的点

对于每个端点,通过 Y 坐标的二进制搜索和左/右梯形边缘的一些数学运算,查找是否位于某个梯形中。

让我们找到合适的梯形,我们知道梯形顶部和底部 Y(和bottom<=py<=top),以及左右边缘方程。如果左上点是(xlt, top),左下点是(xlb, bottom),那么左边缘方程是

x * (top - bottom) + y * (xlb - xlt) + (xlt * bottom - xlb * top) = 0

右边缘与xrt, xrb类似。

当我们将端点坐标px, px 代入这个表达式时,我们会得到一些值。该值的符号告诉我们点相对于线的位置(哪一侧)。

如果左右线的符号不同在边之间,即内部梯形。

【讨论】:

  • 是的,好主意,但正如你所说的“一些数学”。对我来说,“数学”就是问题所在。
  • 我添加了一些描述
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-14
相关资源
最近更新 更多