【问题标题】:Finding a ray which intersects a polygon as many times as possible [duplicate]尽可能多地找到与多边形相交的射线[重复]
【发布时间】:2012-06-14 06:50:44
【问题描述】:

令 P 是一个简单但不一定是凸多边形,q 是一个不一定在 P 中的任意点。

设计一种有效的算法来找到一条源自 q 且与 P 的最大边数相交的线段。

换句话说,如果站在 q 点,你应该把枪瞄准哪个方向,这样子弹才能穿过最多的墙壁?

子弹穿过 P 的一个顶点,只获得一面墙的功劳。

O(n log n) 算法是可能的。 n是顶点或边的数量,因为它是一个多边形,边的数量大致等于顶点的数量。

这个和这个一样 this question 但是我无法理解答案,更具体地说,答案似乎不涉及 q,头部和臀部的事情也不清楚,因为多边形上的每个点都是头部和臀部,因为每个点都是连接到两个边缘,如果这有意义的话。 谢谢

【问题讨论】:

    标签: algorithm sorting data-structures


    【解决方案1】:

    因此,任何不与任何顶点附近的多边形相交的最佳答案都会有一个几乎与多边形顶点相交的最佳答案。

    也就是说,如果您有一条线穿过 10 面“墙”并且它不在顶点附近,您可以将它沿某个方向平移到顶点,同时仍然保持 10 面墙相交。

    根据这个推理,您只需搜索通过接近顶点的解决方案。

    因此对顶点进行排序(nlogn),然后搜索几乎与一个顶点相交的每个可能的线段(3n)。您可以在不重新计算每条候选线上的全部交点的情况下执行此操作,因为当线从一个顶点移动到另一个顶点时,它会添加或丢失 2 面墙(或保持不变)。您可以在每一步的固定时间跟踪这种增量变化。

    【讨论】:

    • 顶点是否需要按极角排序?
    • 当然,按照您从 q 点转身时看到的顺序。
    • 谢谢,我想我明白了,我会尝试实施一个解决方案,看看它是否有效,再次感谢
    猜你喜欢
    • 2015-09-21
    • 1970-01-01
    • 1970-01-01
    • 2014-07-28
    • 2014-01-24
    • 2011-08-30
    • 1970-01-01
    • 1970-01-01
    • 2013-10-16
    相关资源
    最近更新 更多