我在计算数组中的最小距离时遇到问题。由于我是使用C的新手,可能会有一个明显的错误,我正在制作,但无法发现。 我举个例子。 Delta_dis应该是计算出的距离。
array[0][0]=9.317;
array[0][1]=3;
array[1][0]=3;
array[1][1]=3;
array[2][0]=10;
array[2][1]=10;
array[3][0]=3;
array[3][1]=10;
for (i=0; i<4; i++)
{
for (k=0; k<4; k++)
{
delta_dis[k] = sqrt(pow((array[i][0]-array[k][0]),2) + pow((array[i][1]-array[k][1]),2));
printf("\ndelta_dis_before[%i]: %f",i,delta_dis[k])
if (delta_dis[k-1]!=0)
{
if (delta_dis[k]>delta_dis[k-1])
{
delta_dis[k] = delta_dis[k-1];
}else if (delta_dis[k]<delta_dis[k-1] & i==k)
{
delta_dis[k] = delta_dis[k-1];
}else
{
delta_dis[k] = delta_dis[k];
}
}else
{
delta_dis[k]=delta_dis[k];
}
printf("\ndelta_dis_after[%i]: %f",i,delta_dis[k])
}
}
所以在第一步中我计算了这些点之间的距离。结果(称为delta_dis_before [k])是正确的。然后我想检查,如果先前计算的距离较小,如果是,则delta_dis [k]应该用较小的距离交换。但是,如果所选阵列相同,则不应更改最小距离i = k。 但是,只要我执行此操作,delta_dis_after始终为0。 例如,我得到的i = 0是(我对下面的数字进行了整理)
delta_dis_before[0]: 0
delta_dis_after[0]: 0
delta_dis_before[1]: 6.317
delta_dis_after[1]: 0
delta_dis_before[2]: 7.033
delta_dis_after[2]: 0
delta_dis_before[3]: 9.429
delta_dis_after[3]: 0
但我想要的是:
delta_dis_before[0]: 0
delta_dis_after[0]: 0
delta_dis_before[1]: 6.317
delta_dis_after[1]: 6.317
delta_dis_before[2]: 7.033
delta_dis_after[2]: 6.317
delta_dis_before[3]: 9.429
delta_dis_after[3]: 6.317
我希望我能够正确解释问题是什么以及我想要计算什么。 有人可以帮我解决这个问题吗?谢谢!