非交叉椭圆的最近三个邻居

时间:2012-02-27 16:21:48

标签: algorithm matlab computational-geometry ellipse nearest-neighbor

我正在研究一个问题,那就是为一组任意放置的非交叉椭圆找到最接近的三个邻居。作为一个新用户,我不允许包含图片标签,但我已经在页面底部包含了URL,因为我一直认为我能够更好地用视觉辅助来解释自己。图片展示了Apollonius圈子将3个最近的椭圆相互连接的意思。

到目前为止,我已尝试使用椭圆之间的最小距离并通过增量和扫描线方法修改Delaunay三角测量,使用各种技术,包括在每3个椭圆配置之间形成的三角形圆等,并尝试估计具有边界的邻居盒子,并完全没有关于如何有效地工作的想法

虽然我已经找到了解决方案,但它涉及详尽地搜索并比较每个三个椭圆与其他所有椭圆,并且时间复杂度为n(n-1)(n-2)/3!。最重要的是,每次计算都是迭代而不是代数完成的。

有人甚至不知道如何解决这个问题,这可以用代数方式完成,而且时间复杂度要低n^2吗?

即使是一种技术的建议也适合我尝试一下,因为现在我已经在这里工作了将近3个星期而且真的没有接近一个体面的答案。

Image http://img859.imageshack.us/img859/727/nearesttrio.png

2 个答案:

答案 0 :(得分:3)

如果您为椭圆计算Voronoi图,那么您的圆心点将放置在图的交叉处。

http://ima.umn.edu/nuggets/voronoi.html

答案 1 :(得分:0)

您可以根据边界框将椭圆打包成R-tree。 R树是用于空间对象的二叉树类数据结构,并且通过遍历支持有效的最近邻居和第k个最近邻居查询。

对于具有许多椭圆的大型数据集,使用R树应该显着减少距离测试的数量,仅扫描查询附近的树的子集。

希望这有帮助。