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


[[Tonyu基礎練習]]-[[練習:数学基礎知識とゲームへの活用]]-マクローリン展開によるangleの精密化

現在のTonyuではangleは精密ではありません。&br;
簡単な近似を行っております。&br;
print(angle(1,1));&br;
45&br;
print(angle(1,sqrt(3)));&br;
64.0192337036133 != 60&br;
print(angle(sqrt(3),1));&br;
25.9807624816895 != 30&br;
これらの計算結果は&br;
(x,y)に対して&br;
tonyuAngle=45*y/x;&br;
で表現されています。&br;

座標(1,sqrt(3))に対して、60という正確な数値を算出するためにはatan()関数をしようしなければなりません。しかし、atan()関数はTonyuSystemには用意されていませんので、より精度の高い近似法により誤差を無くさなければなりません。

arctanとはアークタンジェントとよばれ、その役割は数値に対してラジアンで返します。&br;
arctan(1/√3)=π/6&br;
arctanはプログラム言語では通常atan()と表現されます。&br;

近似式はマクローリン展開を用いて求めますが、結果だけ述べさせてもらうとfunctionを用いて第4項まで求めて&br;
<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度まで成立します。それ以外の数値に関しては成立しません。

参考:&br;
print(angle(sqrt(3),1));&br;
25.9807624816895&br;
print(arctan(1/sqrt(3)));&br;
30.0096645355225&br;
print(angle(1,1));&br;
45.0000000000000&br;
print(arctan(1/1));&br;
47.8374214172363 1以上の数値の誤差は大きくなります&br;

45度から135度までの数値の近似は位相をずらす必要性があります。よって、テイラー展開を用いるかもしくは、プログラミング上で判断するしか方法はありません。

補足:&br;
print(arctan(1/1));&br;
47.0360870361328 マクローリン展開第6項まで求めた場合&br;
print(arctan(1/1));&br;
46.5867080688477 マクローリン展開第8項まで求めた場合&br;

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS