-5
精度は約0.000001
が欲しいです。ここC++のsinlとcosl関数の精度
typedef struct p {
long double x;
long double y;
}point;
point rotate_point(long double cx,long double cy,long double angle,point p) //pivot then angle then point to rotate
{ // cout<<"\ncx="<<cx<<"cy="<<cy<<"x="<<p.x<<"y="<<p.y;
angle=(angle/100)*pi*2;
// translate point back to origin:
p.x -= cx;
p.y -= cy;
cout.setf(ios::fixed);
cout.setf(ios::showpoint);
cout.precision(20);
// rotate point
long double xnew = p.x * cosl(-angle) - p.y * sinl(-angle);
long double ynew = p.x * sinl(-angle) + p.y * cosl(-angle);
// translate point back:
p.x = xnew + cx;
p.y = ynew + cy;
cout<<"x="<<p.x<<"y="<<p.y;
return p;
}
は私がcx
がcy
が回動され、ここで、所定のピボット約点を回転させる機能rotate_point
を使用して、point
が時計方向に回転する点で、angle
午前使用していたコードセグメントであります度数で渡される角度です(ラジアンで渡すことはできません)。私の問題は、値を持つ関数を呼び出すときですrotate_point(50,50,25, p)
ここでp.x=50 p.y=100
期待される出力はx=100 y=50
です。
私はx=99.99999000666841262458 y=49.96838777042233631365
を取得しています。x
は正常ですが、y
は希望する精度の範囲ではありません。あなたは、精度が必要な場合は
[ルール](https://www.facebook.com/hackercup/terms/)は「問題を解決しないでください」とは言いません(https://www.facebook .com/hackercup/problem/1254819954559001 /) –
'angle =(angle/100)* pi * 2;とは何ですか?ラジアン換算ではありませんが、それに似ています。 'π'とは何ですか?おそらく、あなたは 'pi = 3.142'または他のcrass値を持っています。数学ライブラリのヘッダーに定義されている値を使用します。 –
piは#define pi(22/7)で、実際にその度数をラジアン変換します (angle/100)* pi *(360/180) –