在Java中,无需使用距离公式即可找到相对于对象的最近点

在Java中,无需使用距离公式即可找到相对于对象的最近点,java,math,coordinates,distance,Java,Math,Coordinates,Distance,如果我有一个属性为x和y的对象,我如何在不使用距离公式的情况下判断数组中哪个点最接近?如果不使用距离公式的某些变量,就无法得到准确的结果。但是你可以通过不在事后求平方根来节省一些周期;这种比较仍然有效 r=dx2+dy2 如果不使用某种不同的距离公式,就无法得到准确的结果。但是你可以通过不在事后求平方根来节省一些周期;这种比较仍然有效 r=dx2+dy2 如果你不关心确切的距离,你也许可以利用你的源点和目的点的x和y坐标之间的差异来为你提供一些排序 //The following code do

如果我有一个属性为x和y的对象,我如何在不使用距离公式的情况下判断数组中哪个点最接近?

如果不使用距离公式的某些变量,就无法得到准确的结果。但是你可以通过不在事后求平方根来节省一些周期;这种比较仍然有效

r=dx2+dy2


如果不使用某种不同的距离公式,就无法得到准确的结果。但是你可以通过不在事后求平方根来节省一些周期;这种比较仍然有效

r=dx2+dy2


如果你不关心确切的距离,你也许可以利用你的源点和目的点的x和y坐标之间的差异来为你提供一些排序

//The following code does not return the closest point, //but it somewhat does what you need and complies with //your requirement to not use the distance formula //it finds the sum of x and y displacements Point destination=... Point nearestPoint= points.get(0); for (Point p : points){ closenessCoefficient= Math.abs(destination.x-p.x) + Math.abs(a.destination-p.y); nearestPoint=Math.Min(closenessCoefficient, nearestPoint); } return nearestPoint; //以下代码不返回最近的点, //但它在某种程度上满足了您的需要并符合您的要求 //您不使用距离公式的要求 //它求x和y位移之和 点目的地=。。。 最接近点的点=点。获取(0); 对于(点p:点){ 封闭系数=数学abs(目的地x-p.x)+数学abs(目的地a-p.y); 最近点=数学最小值(闭合系数,最近点); } 返回最近点;
如果你不关心确切的距离,你也许可以利用你的源点和目的点的x和y坐标之间的差异来为你提供一些排序

//The following code does not return the closest point, //but it somewhat does what you need and complies with //your requirement to not use the distance formula //it finds the sum of x and y displacements Point destination=... Point nearestPoint= points.get(0); for (Point p : points){ closenessCoefficient= Math.abs(destination.x-p.x) + Math.abs(a.destination-p.y); nearestPoint=Math.Min(closenessCoefficient, nearestPoint); } return nearestPoint; //以下代码不返回最近的点, //但它在某种程度上满足了您的需要并符合您的要求 //您不使用距离公式的要求 //它求x和y位移之和 点目的地=。。。 最接近点的点=点。获取(0); 对于(点p:点){ 封闭系数=数学abs(目的地x-p.x)+数学abs(目的地a-p.y); 最近点=数学最小值(闭合系数,最近点); } 返回最近点;
如果您必须精确地找到最近的邻居,则无法计算距离公式,至少对于几个点。正如已经指出的,当简单地比较距离平方r^2=x^2+y^2时,可以避免在大多数情况下评估昂贵的sqrt


但是,如果有大量的点分布在很大的距离范围内,则可以首先使用类似于此处所示的近似值。然后,您可以仅为近似值给出的最近点计算实际距离公式。在乘法也很昂贵的体系结构上,这会产生很大的不同。但是,在现代x86/x86-64体系结构上,这应该无关紧要。

如果您必须准确地找到最近的邻居,则无法计算距离公式,至少对于几个点而言。正如已经指出的,当简单地比较距离平方r^2=x^2+y^2时,可以避免在大多数情况下评估昂贵的sqrt


但是,如果有大量的点分布在很大的距离范围内,则可以首先使用类似于此处所示的近似值。然后,您可以仅为近似值给出的最近点计算实际距离公式。在乘法也很昂贵的体系结构上,这会产生很大的不同。但是,在现代x86/x86-64体系结构上,这应该无关紧要。

难道不能将x距离和y距离相加吗?不可以。dx为1,dy为1的点的距离为1.414。dx为1.5,dy为0的点的距离为1.5。难道不能将x距离和y距离相加吗?不。dx为1,dy为1的点的距离为1.414。dx为1.5,dy为0的点的距离为1.5。