如何计算数组中的最小距离?

时间:2017-02-20 14:56:07

标签: c arrays

我在计算数组中的最小距离时遇到问题。由于我是使用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

我希望我能够正确解释问题是什么以及我想要计算什么。 有人可以帮我解决这个问题吗?谢谢!

0 个答案:

没有答案