sin cos tanめも
座標を求めたりするときにsinやらcosやらどれでどれを求めるのか、正直いまいちよく覚えてないのでメモ
この辺見ながら使いそうなところとかをまとめていこうと思う
使いそうなところとしては、相手の距離と角度で相手の座標を求める時なんかに使いそう
計算用に角度θ、距離、座標を定義しておく
角度 => θ, 距離 => r, 座標 => x y また,角度はラジアン表記とする。
三角関数の定義によると
sinθ = y / r
cosθ = x / r
tanθ = y / x
これを使って計算していく
相手の距離と角度で相手の座標を求める方法
数学的に書くと直角三角形の角度と斜辺から底辺と高さを求めるとも言う
分かっているのはθとrなので, rを含む式のsinとcosを使う
xはcosθに,yならsinθにrをかけてやればxとyが求められる。
式にすると x=r*cosθ, y=r*sinθとなる。c言語で書くなら
x = cos(theta) * r;
y = sin(theta) * r;
こんな感じになる。
適当にCで書いてみた。
#include <stdio.h> /*標準入出力*/ #include <math.h> /*三角関数*/ #define _PI (3.141592653589793238) /*円周率*/ class triangle { public: double theta = 0; /* 角度(ラジアン) */ double r = 0; /* 斜辺 */ double x = 0; /* 底辺 */ double y = 0; /* 高さ */ /* 斜辺と角度から底辺と高さを計算 */ void cal_xy() { x = cos(theta) * r; y = sin(theta) * r; } /* 角度と高さから底辺と斜辺を計算 */ void cal_rx() { r = y / sin(theta); x = y / tan(theta); } /* 底辺と角度から斜辺と高さを計算 */ void cal_ry() { r = x / cos(theta); y = x * tan(theta); } /* 底辺と斜辺から角度を計算 */ void xr_theta() { theta = acos(x / r); } /* 高さと斜辺から角度を計算 */ void yr_theta() { theta = asin(y / r); } /* 底辺と高さから角度を計算 */ void xy_theta() { theta = atan(y / x); } /* 度数からラジアン角 */ void torad() { theta = (theta * _PI) / 180; } /*ラジアン角から度数*/ void todeg() { theta = (theta * 180) / _PI; } }; void main() { triangle T; /* Tを宣言*/ T.x = 1; /* x座標をセット*/ T.theta = 45; /* 角度をセット(度数)*/ T.torad(); /* 度数をラジアンへ*/ T.cal_ry(); /* 角度とX座標から残りを求める*/ printf("θ=%f,x=%f,y=%f,r=%f\n",T.theta,T.x,T.y,T.r); }