如何确定两个凹/凸形状是否在特定距离?

时间:2016-03-25 10:00:47

标签: javascript algorithm math geometry polygon

我必须确定两个凹/凸形状是否彼此相距d。我知道分离轴定理可能在确定距离时很方便,但是在O(n2)时间内运行,我正在为任何形状寻找O(n)或O(nlogn)算法。我想在javascript中为任何两个SVG实现它

1 个答案:

答案 0 :(得分:0)

这是一个广泛而艰巨的问题。

要处理最困难的情况(如椭圆/贝塞尔距离),您需要以某种方式展平轮廓,因此我建议在所有情况下展平,并仅解决两个多边形的问题。

令人惊讶的是,你在网上找不到两个多边形之间距离的资源。

假设您正在处理形状的内部(而不仅仅是轮廓),您首先必须检查多边形的空隙交点(否则距离为0)。我想这可以在时间O(N.Log(N))完成。

然后,如果我是对的,两个多边形之间的最近距离是所有顶点到另一个多边形的最近距离中的最短距离。如果构造两个多边形的Voronoi图(在时间O(N.Log(N))中可行),则会得到两个平面细分,在这个细分中,您可以及时解决每个点的Log(N)点位置问题

所有放在一起应该导致O(N.Log(N))解决方案。您需要一个专门的计算几何库来实现这一目标。