Я пишу программу, где мне нужно повернуть o точку. Но что-то в расчетах неверно.Sin, cos, radian и вращать
Это функция для вращения (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
Если вы имеете в виду '-2.07087751e-007' против' 0', нет ничего плохого. 'sin' и' cos' чисел с плавающей запятой не могут дать точных результатов. – kennytm
Это обычная ошибка округления, когда речь идет о числах с плавающей и двойной точками. – Nomad101