首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于计算一组三维空间数据两个点之间的欧几里得距离

2013-08-01 
关于计算一组三维数据两个点之间的欧几里得距离#define NUM 300void edDistance(){for(int i0iNUM-1i+

关于计算一组三维数据两个点之间的欧几里得距离
#define NUM 300
void edDistance()
{
    for(int i=0;i<NUM-1;i++)
    {
        d_x1=Data1.data[i].x;
        d_y1=Data1.data[i].y;
        d_z1=Data1.data[i].z;

      for(int j=i+1;j<NUM;j++)
      {
          d_x2=Data1.data[j].x;
          d_y2=Data1.data[j].y;
          d_z2=Data1.data[j].z;
      }

    }

      square1=(d_x1-d_x2)*(d_x1-d_x2);
      square2=(d_y1-d_y2)*(d_y1-d_y2);
      square3=(d_z1-d_z2)*(d_z1-d_z2);
      sum=square1+square2+square3;
      result=sqrt(sum);
}
这是其中计算两个点之间的欧几里距离的一个函数,最后需要调用距离与定值比较,for循环这样写后面的值就覆盖了吗?还是for循环应该并列写才对,求指教!
[解决办法]
实际上返回的是这个两个点之间的距离:Data1.data[ NUM-2 ],Data1.data[ NUM-1 ] 
[解决办法]


#define NUM 300
//定义数据类型:
struct Point{
double x,y,z;
};
//
struct Data{
Point data[Num]
};
//定义数据
Data Data1={{0}};
//.......
 void edDistance()
 {   double result=0.0; 
     for(int i=0;i<NUM-1;i++)
     {
         d_x1=Data1.data[i].x;
         d_y1=Data1.data[i].y;
         d_z1=Data1.data[i].z;

       for(int j=i+1;j<NUM;j++)
       {
           d_x2=Data1.data[j].x;
           d_y2=Data1.data[j].y;


           d_z2=Data1.data[j].z;
           //你抄错了吧,这个计算距离和比较,都应该在这里才对!
           square1=(d_x1-d_x2)*(d_x1-d_x2);
           square2=(d_y1-d_y2)*(d_y1-d_y2);
           square3=(d_z1-d_z2)*(d_z1-d_z2);
           sum=square1+square2+square3;
           result=sqrt(sum);
           //在这里比较的吧! 
       }  
     }       
 }



PS:求距离的函数可以单独定义
如下

#define NUM 300
//定义数据类型:
struct Point{
double x,y,z;
};
//
struct Data{
Point data[Num]
};
//定义数据
Data Data1={{0}};

// 两个数的差的平方,坐标差的平方。
inline double diffsqr(double x1,double x2){
    return (x1 - x2)* (x1 -x2);
}
//直接坐标表示,求距离 
inline double distance(double x1,double y1,double z1
          ,double x2,double y2,double z2)
{
    return sqrt(difsqr(x1 , x2) + difsqr(y1 , y2) + difsqr(z1 , z2));

//点表示,求距离 
inline double distance(const Point &p1,const point &p2)
{
    return sqrt(difsqr(p1.x , p2.x) + difsqr(p1.y , p2.y) + difsqr(p1.z , p2.z));

//在循环里
void edDistance()
 {
     double result=0.0; 
     for(int i=0;i<NUM-1;i++)
     {
         for(int j=i+1;j<NUM;j++)
         {  
             //计算距离 
             result = distance(Data1.data[i] , Data1.data[j]);
             //在这里比较的吧! 
          }  
     }       
 }

热点排行