Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 从平面上的一组点中查找最近点_Algorithm_Geometry - Fatal编程技术网

Algorithm 从平面上的一组点中查找最近点

Algorithm 从平面上的一组点中查找最近点,algorithm,geometry,Algorithm,Geometry,给定二维平面上的n个点,使与所有点的距离最小化的点是什么?该点不必来自给定的点集。是质心还是别的什么 如何使用算法找到所有此类点(如果不止一个)?可能不止一个点。考虑一个只有两个点的平面。这些点描述了一条线段。该线段上的任何点与两个端点的总距离相同。蛮力算法。可能会给你最好的结果。首先,定位一个矩形/任意四边形边界的输入点。最后,对于矩形内的每个点,计算与其他点的距离。求点与输入集的距离之和。说这是这一点的“成本”。对每个点重复此操作,并选择具有最小成本的点 智能也可以添加到算法中。它可以消除基

给定二维平面上的n个点,使与所有点的距离最小化的点是什么?该点不必来自给定的点集。是质心还是别的什么


如何使用算法找到所有此类点(如果不止一个)?

可能不止一个点。考虑一个只有两个点的平面。这些点描述了一条线段。该线段上的任何点与两个端点的总距离相同。

蛮力算法。可能会给你最好的结果。首先,定位一个矩形/任意四边形边界的输入点。最后,对于矩形内的每个点,计算与其他点的距离。求点与输入集的距离之和。说这是这一点的“成本”。对每个点重复此操作,并选择具有最小成本的点

智能也可以添加到算法中。它可以消除基于平均成本的区域,等等

这就是我解决问题的方法,至少。。。希望有帮助。

这被称为“距离中心”,与质心不同

首先,您必须定义您使用的距离度量。如果我们假设您使用的是标准度量d=sqrt((x1-x2)^2+(y1-y2)^2),那么它不是唯一的,问题是最小化此总和

要证明这个答案不是唯一的,最简单的例子是直线例子。两点之间的任何点与所有点的总距离相等

在1D中,正确答案将是任何左右点数相同的答案。只要这是真的,那么向左和向右的任何移动都会以相同的量增加和减少左右两侧,因此保持相同的距离。这也证明了质心不一定是正确的答案

如果我们扩展到2D,情况就不再是这样了——因为sqrt使问题加权。令人惊讶的是,我似乎没有一个标准的算法!该页面似乎使用了暴力方法。我从来不知道


如果我想使用一个算法,那么我会找到X和Y的中间点作为起点,然后使用a-这会很快得到答案。整个方程最终是一个二次方程,所以感觉应该有一个精确的解。

这里详细讨论了这一点

不要关闭这个,几何算法完全在堆栈溢出的范围内,是家庭作业吗?还有,你想用什么语言来实现这一点?不,这不是家庭作业。我在学习计算几何的算法。所以我有一个疑问,我是用C语言写的,但它的复杂性非常高。检查矩形内的每个点,如何做到这一点,点坐标可以是任何浮点数。显然,您需要一些步长,两个连续点之间的最小距离,使用C的一个简单示例可能是:for(int row=minR;rown^2