我正在寫一個程序,我必須旋轉o點。 但是在計算中的東西是不正確的。Sin,cos,弧度和旋轉
這是函數旋轉(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
是旋轉作爲這個圖象
我知道,expample時 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
。
這裏有什麼問題?
你能不能給我們調用ROTY? – Vincent 2013-04-29 08:44:46
如果你的意思是'-2.07087751e-007'和'0',那沒有什麼錯。浮點數的「sin」和「cos」不能產生精確的結果。 – kennytm 2013-04-29 08:45:28
這只是浮點和雙精度數字的常規舍入誤差。 – Nomad101 2013-04-29 08:46:47