【问题标题】:Asymptotically optimal algorithm to find all valid diagonals which lie inside a non-convex polygon找到位于非凸多边形内的所有有效对角线的渐近最优算法
【发布时间】:2022-11-21 04:29:17
【问题描述】:

我有一个点列表 (x1, y1), ... (xn, yn)。这些点是非凸单多边形的顶点。目标是找到多边形中的所有有效对角线(完全位于多边形内部)。

我的解决方案是检查每条对角线与多边形边的交点。如果对角线与边相交,则表示它不是有效对角线。但是如果对角线完全在多边形之外怎么办?它与多边形的边没有交点。这种情况可以用交叉乘法解决吗?我在 cpp 中使用 long double 所以我想要最准确的解决方案。 Example of polygon

【问题讨论】:

  • 我想你可以检查一下方向是否在外面。 (那么里面就不能完整)
  • 我怎样才能检查它?由于准确性,我不想使用三角函数。
  • 哦!我可以通过交叉乘法来检查它。感谢提示
  • 我意识到如果对角线的开头有钝角,我们就会遇到问题,所以交叉乘法不起作用
  • 如果它是非自相交多边形,那么有一个特定的内部方向,当您遍历节点时,左侧/右侧始终是内侧。

标签: c++ geometry polygon triangulation non-convex


【解决方案1】:

绘制对角线的支撑线并找到它与多边形的交点。如果小心操作,您会发现偶数个交点,它们定义了直线上的间隔(在给定的情况下为 0-0 和 2-4)。检查对角线是否与其中一个间隔匹配。

【讨论】:

    猜你喜欢
    • 2011-05-28
    • 2016-03-03
    • 2011-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-23
    • 2013-02-04
    • 2018-06-25
    相关资源
    最近更新 更多