###実現したいこと
平面上の点を、原点を中心に回転させた後の座標を出力したい。
###試したこと
std::cout<<theta<<"ラジアンは"<<thdo<<"度\n";
をしたら60.00..と出てきたのでラジアンの変換はできています。
###問題点
C++による誤差なのかもしれないのですが、回転させた後の座標が違う気がします。
手計算でvoid rotate
の中の式x=x*cos(thdo)-y*sin(thdo);
を計算してみたところ4になりました。
計算結果とあまりにも違います。
三角関数のプログラムの仕方を学習したばかりなのであまり使い方がわかりません。教えてください。
ちなみに、1.0472radは約60°です。
また、回転させた後の座標を見る際にこちらのサイトを参考にしました。これによると、実行結果は(2,3.4641)になるはずです。
実行結果
平面上の点を1つ入力してください: 4 0 回転させる角度を入力してください(※角度はラジアンを単位として): 1.0472 回転させた後の座標は (-3.80948,1.16168)
###コード
C++
1//点の回転 2 3#include<iostream> 4#include<cmath> 5 6//x座標y座標の定義 7struct point 8{ 9 double x; //x座標 10 double y; //y座標 11 12 //原点を中心に反時計回りにθだけ回転させるメンバ関数 13 void rotate(double theta){ 14 double pai=std::acos(-1.0); //円周率π 15 double thdo=theta*(180/pai); //ラジアンを度にする 16 //std::cout<<theta<<"ラジアンは"<<thdo<<"度\n"; 17 x=x*cos(thdo)-y*sin(thdo); 18 //std::cout<<"x座標"<<x; 19 y=x*sin(thdo)+y*cos(thdo); //点(x,y)を原点を中心にθだけ回転させると(xcosθ-ysinθ,xsinθ+ycosθ)となる 20 } 21}; 22 23int main() 24{ 25 point p; 26 double kakudo; 27 std::cout<<"平面上の点を1つ入力してください: "; 28 std::cin>>p.x; 29 std::cin>>p.y; 30 std::cout<<"回転させる角度を入力してください(※角度はラジアンを単位として): "; 31 std::cin>>kakudo; 32 p.rotate(kakudo); 33 34 std::cout<<"回転させた後の座標は\n"; 35 std::cout<<"("<<p.x<<","<<p.y<<")"; 36 37 return 0; 38}
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/10 04:17
2020/07/10 04:19