atan2関数
ラジアンとは?
「円の半径に等しい長さの弧の中心に対する角度」と定義されています。
ラジアンと度の関係を表したものを表1に示します。
図1:ラジアンによる円周上の角度(単位:rad)
※π=3.14159…
#define PI 3.141592653589793 void setup() { Serial.begin(9600); //9600bpsでシリアルポートを開く } void loop() { //{}内を無限ループで実行する float YA = 0, YB = -0.7071; //点A・BのY座標を宣言(-0.7071) float XA = 0, XB = -0.7071; //点A・BのX座標を宣言 Serial.print("Direction = "); //目的地Aの方角(°) Serial.print(atan2((YB - YA), (XB - XA)) * 180.0 / PI); Serial.print(" : Distance = "); //目的地A迄の距離(m) Serial.println(sqrt(pow(XB - XA, 2) + pow(YB - YA, 2)), 2); delay(1000); //1000ms(1秒)待ちます }
図1:プログラム例
■三角関数の基礎
sinθ = Y/r、θ = Asin(Y/r)
cosθ = X/r、θ = Acos(X/r)
tanθ = Y/X、θ = Atan(Y/X)
■atan2関数で方位を計算!
目的地(A)の緯度(YA)・経度(XA)が既知で、かつ現在地(B)の緯度(YB)・経度(XB)がGPS等で分かっている場合、以下の式で目的地の方角(θ)と距離(r)を算出する事が出来ます。
前提: X = XB-XA、Y = YB-YA
目的地迄の距離: r=(X^2+Y^2)^0.5
目的地の方角 : θ = atan2(Y,X)
励みになりますのでよければクリック下さい(^o^)/