求距某一点的最长距离(java,二维图)
Find longest distance from a certain point (java, 2d diagram)
我正在 Java 中从事聚类程序。我试图在具有 x 和 y 轴的二维图中找到与另一点距离最长的点。
我虽然可以使用 pytagoras:
其中起点Y轴的平方+其他点X轴的平方将决定它们之间的距离。
我的代码所做的是针对这个特定点,检查所有其他点,看看它是否找到了距离更高的点。我现在的代码如下:
// The points to find longest distance from
x_coord = 2;
y_coord = 4;
// Need to find right size
double var1 = Math.pow(y_coord, 2); // square of Y
double var2 = 0;
double var3 = 0;
int sum = 0;
/* For all coords ( of the cluster clusters)
* coordsX is an array that holds all the X coordinates
* of all other points
*/
for (int k = 0; k < coordsX.length; k++){
// Check which is furthest away from
var2 = Math.pow(coordsX[k], 2); // square of X
var3 = var1 + var2; // Sum of var1 and var2
sum = (int)Math.sqrt(var3); // Square root to find distance
if (sum > longestDistance){
longestDistance = sum;
}
}
有没有人有任何建议可能是错误的?或者这是一种不适合计算距离的方法?
我从代码中跳出的第一件事是您将 sqrt() 调用的结果转换为 int。这似乎会引起问题。
因此,要计算两点之间的距离,假设 A 和 B 位于 xy 平面上,其中 A 和 B 是索引,您需要执行以下操作:
double distanceSquared = Math.pow(coordsX[A] - coordsX(B), 2) + Math.pow(coordsY[A] - coordsY(B), 2);
而如果只是求最远的点,则不需要求平方根,因为是单调函数,所以根本不会改变比较的结果。
简单比较距离平方
编辑:给你的代码。
double longestDistanceSquared = 0;
int mostDistantPointIndex = -1;
for (int k = 0; k < coordsX.length; k++){
double distanceSquared = Math.pow(coordsX[k] - x_coord, 2) + Math.pow(coordsY[k] - y_coord, 2);
if (distanceSquared > longestDistanceSquared){
longestDistanceSquared = distanceSquared;
mostDistantPointIndex = k;
}
}
我正在 Java 中从事聚类程序。我试图在具有 x 和 y 轴的二维图中找到与另一点距离最长的点。 我虽然可以使用 pytagoras: 其中起点Y轴的平方+其他点X轴的平方将决定它们之间的距离。
我的代码所做的是针对这个特定点,检查所有其他点,看看它是否找到了距离更高的点。我现在的代码如下:
// The points to find longest distance from
x_coord = 2;
y_coord = 4;
// Need to find right size
double var1 = Math.pow(y_coord, 2); // square of Y
double var2 = 0;
double var3 = 0;
int sum = 0;
/* For all coords ( of the cluster clusters)
* coordsX is an array that holds all the X coordinates
* of all other points
*/
for (int k = 0; k < coordsX.length; k++){
// Check which is furthest away from
var2 = Math.pow(coordsX[k], 2); // square of X
var3 = var1 + var2; // Sum of var1 and var2
sum = (int)Math.sqrt(var3); // Square root to find distance
if (sum > longestDistance){
longestDistance = sum;
}
}
有没有人有任何建议可能是错误的?或者这是一种不适合计算距离的方法?
我从代码中跳出的第一件事是您将 sqrt() 调用的结果转换为 int。这似乎会引起问题。
因此,要计算两点之间的距离,假设 A 和 B 位于 xy 平面上,其中 A 和 B 是索引,您需要执行以下操作:
double distanceSquared = Math.pow(coordsX[A] - coordsX(B), 2) + Math.pow(coordsY[A] - coordsY(B), 2);
而如果只是求最远的点,则不需要求平方根,因为是单调函数,所以根本不会改变比较的结果。
简单比较距离平方
编辑:给你的代码。
double longestDistanceSquared = 0;
int mostDistantPointIndex = -1;
for (int k = 0; k < coordsX.length; k++){
double distanceSquared = Math.pow(coordsX[k] - x_coord, 2) + Math.pow(coordsY[k] - y_coord, 2);
if (distanceSquared > longestDistanceSquared){
longestDistanceSquared = distanceSquared;
mostDistantPointIndex = k;
}
}