Tonyu基礎練習-練習:数学基礎知識とゲームへの活用-マクローリン展開によるangleの精密化
現在のTonyuではangleは精密ではありません。
簡単な近似を行っております。
print(angle(1,1));
45
print(angle(1,sqrt(3)));
64.0192337036133 != 60
print(angle(sqrt(3),1));
25.9807624816895 != 30
これらの計算結果は
(x,y)に対して
tonyuAngle=45*y/x;
で表現されています。
座標(1,sqrt(3))に対して、60という正確な数値を算出するためにはatan()関数をしようしなければなりません。しかし、atan()関数はTonyuSystem?には用意されていませんので、より精度の高い近似法により誤差を無くさなければなりません。
arctanとはアークタンジェントとよばれ、その役割は数値に対してラジアンで返します。
arctan(1/√3)=π/6
arctanはプログラム言語では通常atan()と表現されます。
近似式はマクローリン展開を用いて求めますが、結果だけ述べさせてもらうとfunctionを用いて第4項まで求めて
pre>
function arctan(xx){
xx=xx-1/3*xx*xx*xx+1/5*xx*xx*xx*xx*xx-1/7*xx*xx*xx*xx*xx*xx*xx+1/9*xx*xx*xx*xx*xx*xx*xx*xx*xx;
return xx/3.14159265358*180;
}
/pre>
のようになり
結果は30.0096645355225となります。
しかし、この近似はおおよそ-45度から45度まで成立します。それ以外の数値に関しては成立しません。
参考:
print(angle(sqrt(3),1));
25.9807624816895
print(arctan(1/sqrt(3)));
30.0096645355225
print(angle(1,1));
45.0000000000000
print(arctan(1/1));
47.8374214172363 1以上の数値の誤差は大きくなります
45度から135度までの数値の近似は位相をずらす必要性があります。よって、テイラー展開を用いるかもしくは、プログラミング上で判断するしか方法はありません。
補足:
print(arctan(1/1));
47.0360870361328 マクローリン展開第6項まで求めた場合
print(arctan(1/1));
46.5867080688477 マクローリン展開第8項まで求めた場合