【问题标题】:How to find closest points between two convex hull in MATLAB?如何在MATLAB中找到两个凸包之间的最近点?
【发布时间】:2016-11-04 19:49:10
【问题描述】:

在人工神经网络 matlab 代码的一部分中,我想找到两个凸多边形的最近点。

我看到了

dsearchn(X,T,XI)

命令的描述here,但它会在两组点之间找到最近的点,并且多边形(如凸面)有无限个点。

那么你能提出任何方法/想法吗?

注意:我使用的是 MATLAB 2014a。我有每个凸点的坐标。

【问题讨论】:

  • File Exchange 上的 this 有一个函数可以做到这一点。如 cmets 中所述,此函数的复杂度为 O(mn),而已知的最小复杂度为 O(logm + logn)(参见 Edelsbrunner)。
  • @beaker 是的,在你告诉我之前我已经找到了这个函数,并且稍微修改了代码,这给出了我的答案。感谢您的宝贵时间。

标签: matlab nearest-neighbor


【解决方案1】:

在文件交换中使用This File,我找到了解决方案。

通过一些代码修改,我绘制了一个我想要的垂直平分线。当然,这种方式很费时间。

【讨论】:

    【解决方案2】:

    如果您对dsearchn 提供的内容不满意,那么,如果我是您,我会选择以下两种方法之一:

    • 在顶点上查找最近邻(例如 多边形 A 是多边形 B 的给定顶点的 NN。
    • 在多边形 A 内选择一个随机点(您可能需要计算 A 的凸包,但您可以跳过它并仅考虑 你已经知道的顶点)。那个随机点就是查询。找 从多边形 B 的顶点到该点的 NN。

    您可能想在Software recommendations 中询问更多信息。


    编辑:

    另一种方法是这样的:

    创建多边形 A 的代表性数据集。自行设置数据集的大小,并用多边形内的点样本填充它。在多边形内均匀随机选择它们。

    然后取多边形 B 的一个点(多边形 B 内的顶点或随机点),这就是查询点,您将在多边形 A 的代表性数据集中寻找最近邻。

    当然,这只是一个近似值,但我现在想不出别的了。

    请注意,您当然可以对多边形 B 执行相同操作。

    【讨论】:

    • 第一种方法不是我的答案——实际上我没有使用 dsearchn 命令,因为我不想只找到最近的顶点——我需要准确的答案。第二种方式有同样的问题。但真的很感谢您抽出时间@gsamaras。
    • @pooriahaddad 是的,我知道,但我想试一试!我更新了我的答案,希望对您有所帮助。顺便说一句,很好的问题,得到了我的 +1!
    • 您最后建议的方法似乎有效。我在文件交换中找到了一种解决方案,但您的方法似乎需要更少的时间来解决问题。你有我的 +1,谢谢;
    猜你喜欢
    • 2016-03-03
    • 2013-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-20
    • 1970-01-01
    • 2012-08-18
    相关资源
    最近更新 更多