我正在编写一个程序,我必须旋转o点。 但计算中的某些东西是不对的。
旋转功能(Y轴):
point3 rotY(point3 a, float angle){
float x,z;
z=a.z*cos(angle)-a.x*sin(angle);
x=a.z*sin(angle)+a.x*cos(angle);
a.z=z;
a.x=x;
return a;
}
这是第3点结构:
struct point3{
float x,y,z;
point3(){
x=y=z=0.0f;
}
point3(float a,float b,float c){
x=a;y=b;z=c;
}
};
致电代码:
point3 a(0.0f,l,0.0f);
a=rotX(a,S->angle*rad);
std::vector <point3> pocz(S->amount);
for(int i=0;i<S->amount;i++)
pocz[i]=rotY(a,(i*(360.0f/S->amount))*rad);
此(i*(360.0f/S->amount))*rad
的轮播与此图片
我知道这是为了举例
a.x=0.0f
,a.y=2.36880779
和a.z=2.36880779
我希望将它旋转180度此功能将返回
a.x=-2.07087751e-007
,a.y=2.36880779
和a.z=-2.36880779
。
但它应该返回a.x=0.0
,a.y=2.36880779
和a.z=-2.36880779
。
这里有什么不妥?
答案 0 :(得分:3)
这里没有错:浮点运算是近似的(最多6位数)。 有关该主题的更多信息:http://support.microsoft.com/kb/125056
如juanchopanza所述,您可以切换为双倍:http://en.wikipedia.org/wiki/Double-precision_floating-point_format