0

我正在编写一个程序,我必须在其中旋转 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;
}

这是point3结构:

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.0fa.y=2.36880779并且a.z=2.36880779我想将其旋转 180 度时,此函数将返回 a.x=-2.07087751e-007a.y=2.36880779并且a.z=-2.36880779

但它应该返回a.x=0.0,a.y=2.36880779a.z=-2.36880779

这里有什么问题?

4

1 回答 1

3

这里没有错:浮点运算是近似的(最多 6 位)。有关该主题的更多信息:http: //support.microsoft.com/kb/125056

如 juanchopanza 所述,您可以切换到 double :http ://en.wikipedia.org/wiki/Double-precision_floating-point_format

于 2013-04-29T08:46:05.553 回答