AOJ 0016 Treasure Hunt
概要
最初、x=0,y=0でy軸方向に向かって立っている。
現在向いている方向にdisメートル進んで、右にdir度だけ回転する。
数回行い、終了後の座標を出力する。
解法
最初、原点で90度の方向を向いている。
現在向いている方向をangleとすると、
x方向に、dis*cos(angle)
y方向に、dis*sin(angle)
だけ進めばよい。
sin、cosの引数はラジアンを渡すので、角度に(Π/180)を掛けてやる。
進んだ後、角度を更新する。
コード
#include <iostream> #include <cmath> #include <cstdio> using namespace std; #define PI (acos(-1)) int main() { char c; double dis, dir, x = 0, y = 0, angle = 90; while (1) { cin >> dis >> c >> dir; if (dis == 0 && dir == 0) break; x += dis * cos(angle * PI / 180); // ラジアン = 度数 * (Π / 180) y += dis * sin(angle * PI / 180); angle -= dir; } printf("%d\n", (int)x); printf("%d\n", (int)y); return 0; }