2015-06-21 76 views
-1

我正在研究Java中的集群程序。我试图在x轴和y轴的二维图中找到与另一点距离最远的点。 虽然我可以使用pytagoras: 其中,起点的Y轴的平方+其他点的X轴的平方将确定它们之间的距离。从某个点查找最长距离(java,2d图)

我的代码是做这个特定的点,检查所有其他点,看看它是否找到一个距离更远的点。我现在的代码如下:

// 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; 
    } 
} 

有没有人有任何建议可能会出错?或者这是不适合计算距离的方法吗?

+0

天哪,这么多的错误,我不知道从哪里开始...你甚至不能计算两点的距离*这是基本的数学! –

+0

可悲的数学不是我最强烈的一面。除了“学习基础数学”以外,还有什么建议可以启动? – user3470173

+0

您选择的教科书。这是很多关于你喜欢的个人喜好......我的偏好可能对你来说太抽象了。但缺乏数学/统计知识最终会对你造成严重伤害。 –

回答

0

因此,要找到两个点之间的距离,说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; 
    } 
} 
0

从代码中跳出来的第一件事是我将sqrt()调用的结果投射到一个int。这似乎会导致问题。

相关问题