找到某一点的最长距离(java,2d图)

时间:2015-06-21 22:20:30

标签: java distance

我正在研究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;
     }
}

有没有人有什么建议可能出错?或者这是一种不适合计算距离的方法?

2 个答案:

答案 0 :(得分:0)

跳出代码的第一件事就是你将sqrt()调用的结果转换为int。这似乎会导致问题。

答案 1 :(得分:0)

因此,要找到两点之间的距离,比如位于xy平面上的A和B,其中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;
    }
}