【问题标题】:a given point lies inside or outside a polygon给定点位于多边形内部或外部
【发布时间】:2013-12-19 09:52:46
【问题描述】:

我正在尝试这个问题并找到了解决方案:

在每个点的右侧画一条水平线并将其延伸到无穷远

1) 计算直线与多边形边缘相交的次数。
2) 如果交点数为奇数,则点在多边形内 点位于多边形的边缘。如果没有一个条件为真,那么 点在外面。

但我认为有一个简单的解决方案:

for(所有边的顺序相同)
求 3 个点的向量积(给定点和每边的端点)

if all products are > or < 0 : point lies inside polygon or on boundary
else outside

我的解决方案不是更好更高效吗?
还有比这更简单的算法吗?

【问题讨论】:

  • 这真的不是数学论坛的问题吗? math.stackexchange.com
  • 您的算法是否考虑了多边形可能的中间凹度? (顶点内角 > 270 或 300 度)
  • 我认为应该是independent 的凹面或凸面。我们只需要查看叉积的sign。重要的是沿同一方向移动(顺时针或逆时针)。
  • 三点的向量积是什么意思? (向量(A->B)) x 向量(P)?
  • 三个点形成的三角形面积:(x2 - x1)*(y3 - y1)-(y2 - y1)*(x3 - x1)

标签: algorithm geometry


【解决方案1】:

使用叉积检查的建议算法仅适用于凸多边形。对于非凸多边形,很容易找到它不起作用的示例。尝试给定多边形中的任何点cde

【讨论】:

  • 好的,我认为应该是:sum of all angles = +- 360 degree
  • 是的,角度总和应该可以工作,但它似乎并不比光线投射更有效,因为其中涉及三角函数。如果边数很高,也会出现舍入/精度问题。
  • 那么除此之外应该使用什么算法?
  • 在您找到的解决方案中使用光线投射。
  • 你能给我一个有用的光线投射链接吗?
【解决方案2】:

您建议的算法仅适用于凸多边形,实际上用于计算凸包,但对于凹包会失败,凸包算法的正确性再次证明了这一点。

使用此算法的另一种方法是将多边形划分为凸多边形,然后将算法应用于划分的部分以查看该点是否在其中任何一个内

Polygon triangulation

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-05
    • 1970-01-01
    • 2018-09-22
    • 2014-06-16
    • 2020-05-30
    • 2014-01-30
    • 1970-01-01
    相关资源
    最近更新 更多