Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 尽可能多地查找与多边形相交的光线_Algorithm_Sorting_Data Structures - Fatal编程技术网

Algorithm 尽可能多地查找与多边形相交的光线

Algorithm 尽可能多地查找与多边形相交的光线,algorithm,sorting,data-structures,Algorithm,Sorting,Data Structures,设p为简单但不一定是凸多边形,q为p中不一定是凸多边形的任意点 设计一个有效的算法,以找到一条从q开始的线段,该线段与p的最大边数相交 换句话说,如果站在q点,你应该朝哪个方向瞄准,这样子弹就能穿过最多的墙 一颗子弹穿过p的顶点,只会得到一面墙的积分 O(n logn)算法是可能的。n是顶点或边的数量,因为它是多边形,边的数量大致等于顶点的数量 这个和这个一样 然而,我无法理解答案,更具体地说,答案似乎没有涉及到q,而且头和屁股的问题也不清楚,因为多边形上的每个点都是头和屁股,因为每个点都连接到

设p为简单但不一定是凸多边形,q为p中不一定是凸多边形的任意点

设计一个有效的算法,以找到一条从q开始的线段,该线段与p的最大边数相交

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

一颗子弹穿过p的顶点,只会得到一面墙的积分

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

这个和这个一样 然而,我无法理解答案,更具体地说,答案似乎没有涉及到q,而且头和屁股的问题也不清楚,因为多边形上的每个点都是头和屁股,因为每个点都连接到两条边,如果这有意义的话。
谢谢

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

也就是说,如果有一条线穿过10个“墙”,并且它不在顶点附近,则可以在保持10个墙相交的同时,将其朝顶点的某个方向平移

通过这种推理,你只需要寻找接近垂直的解决方案


因此,对垂直线(nlogn)进行排序,然后搜索几乎与一条(3n)相交的每一条可能的线段。可以这样做,而无需重新计算每条候选线上的完整交点集,因为当线从一个顶点移动到另一个顶点时,它会添加或丢失两面墙(或保持不变)。您可以在每一步的固定时间内跟踪此增量更改。

顶点是否需要按极轴角度排序?当然,按照从点q开始旋转时看到它们的顺序。谢谢,我想我理解了,我将尝试实施一个解决方案,看看它是否有效,再次感谢