如何找到基于多边形顶点的所有线段的交点?

问题描述

给出具有已知顶点坐标的凸多边形。每对顶点通过线段连接。有没有找到找到的线段相交的有效算法?

例如,对于常规十二边形,所有线段均形成此图片:

Line segments built on vertices of regular dodecagon

如何在此图片上有效地找到所有交点的坐标?

解决方法

内部相交的数量由n上限选择4,其中n是顶点的数量。不幸的是,对于处于一般位置的凸多边形,它们都将是不同的,因此一种有效的算法将是枚举4个组合(例如,使用this method)并计算从每个组合产生的一个交点(如果您将数字顶点按顺时针顺序排列,然后是从最低到第二高的线段与从第二低到第二高的线段的交点。

如果您对常规多边形特别感兴趣,可能可以做得更好。

,

如果我是对的,那么在任何规则的多边形中,所有0-i段都与所有j-k段相交,其中0<j<ii<k<n-1处有O(n³)相交。然后,您可以将n旋转2π/n次,以获得所有解。

有重复的交点,但是我怀疑(没有证据)这不会改变渐近行为,蛮力可能是有效的。我不知道如何避免重复。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...