读书人

关于计算一组三维空间数据两个点之间的

发布时间: 2013-08-01 15:23:18 作者: rapoo

关于计算一组三维数据两个点之间的欧几里得距离
#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]);
//在这里比较的吧!
}
}
}

读书人网 >C++

热点推荐