motu*2

DIV1目指して問題を解き続ける

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;
}