ご存知、円周率π=3.14……を三次元空間で、らせん状に表示して見ました。
少し前、「円周率は約3と教えます」、なんて話を聞いて、「をいをい(汗)」と思ったのですが、さすがにπ≒3は、やり過ぎだった様ですね(1^_^;)。今現在は異なる教え方が採用されているらしいです(詳細不承知)。
PC含め、計算機で計算させる場合には、以下の様な定数を使います。
それぞれ、ビット数に起因した有効数字があるので、それ以上の桁を与えても、丸められてしまって無効です。
π≒3は、整数int型(16ないし32ビット)ですから、やっぱり酷い……。整数計算したい場合には、分数22/7を使った方が、22÷7≒3.142857……と、有効数字3桁は確保できますのでお勧めです。
ここからは、「円周率を使って計算する」のではなくて、「円周率その物を計算する」お話です。
PC等のプログラムを作って、円周率を計算する場合に用いられる公式は、以下の通りです。
tan-1()関数は逆正接関数と呼ばれて、プログラム言語などでは逆正接⇒「arctangent」より、atan()/arctan()等と言う関数名で知られています。
atan (1)をグレゴリ級数に展開して、πを求めます。ただ、1のatan()は収束が遅いため、そのまま計算すると、とっても時間がかかってしまいます。そこで使うのが、atan()関数の加法定理です(以下式)。
適切なa,bを選んで、何回か加法定理を適応すると、以下に示すマチン公式(下図の上式)と呼ばれる公式が完成します。
atan()の引数<<1と成る程、グレゴリ級数(上図の下式)の収束が速くなるので、上の様な公式が何種類も提案されています。
詳しくは以下の記事でご確認ください。
「#10-6 328duinoをクロックアップ(完結編)」
「#17-8 円周率とデュアルコア」
組み込みマイコンArduinoを使って円周率を計算する、C言語のプログラムなどもダウンロードできます。
完成したデータをリンクしておきます。
1) | Xi-TRACEデータ | spiral_pi.xitr |
1)でレイトレーシングを実行します。
完成した動画を以下にリンクしておきます。
動画で見えている範囲から逸脱したオブジェクトは定義しない様にしてあるので、πの桁数が増えて行ってもレイトレーシング時間が増えることはありません。
あと、「3.14…」の小数点は、ただの点なので、代わりに「π」と言う文字を表示してあります。「3π1415…」って、感じですね。