このWikiは古くなりました:新しいWikiへ移動

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項まで求めた場合


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2017-11-14 (火) 21:24:37 (2352d)