计算几何问题:
点P0
在多边形的边(例如EB
)上随机选择(例如,BCDE
),以在其他点上找到可能的点(即P1,P2,P3,...
)基于给定距离的边(即r
)。以下演示通过查找以点P0
为中心的圆与多边形边之间的交点来显示解决方案。所以问题基本上可以通过Circle--Line-Segment
交叉点分析来解决。
我想知道在计算成本方面这个非常简单的问题是否有更有效的方法?该过程将评估几个million times
,因此任何改进都是有意义的。
更新
感谢您的意见。请考虑我对评论的评论,这有助于更多地澄清问题。不愿意在这里重复,鼓励考虑所有的评论和答案;)。
我刚刚根据找到的[here]算法实现了Circle--Line-Segment Intersection
的方法。实际上我改编它用于线段。 Python中实现的算法基准如下:
线段的数量为:100,000
,系统通常是桌面。经过的时间是:15 seconds
。希望这些有助于对计算成本有所了解。在 Fortan 中实施核心可以显着提高性能
然而,翻译是最后一步。
答案 0 :(得分:2)
对于line
(或line-segment
)与circle
(sphere
中的3D
)之间的交集,有更多解释,实施细节以及 Python,C 等[this link]中的示例代码。您可以尝试使用它们来解决问题
这个想法基本上与您在[here]中找到的相同。
答案 1 :(得分:0)
假设circle--line-intersection
已经过优化,您可以通过区分不同情况获得一些东西:
表示A,B:
如果d(P0,A)< r和d(P0,B)&lt; r:没有交叉点
如果d(P0,A)== r:A处的交叉点
circle--line-intersection
如果d(P0,A)> r和d(P0,B)&lt; r:1个十字路口,执行circle--line-intersection
如果d(P0,A)> r和d(P0,B)> r:有0,1或2个交叉点 - &GT;如果minimum distance到行(A,B)&gt; r:没有十字路口 - &GT;如果minimum distance到行(A,B)== r:1的交点 - &GT;如果minimum distance到行(A,B)&lt; r:2个交叉点