わさっきhb

大学(教育研究)とか ,親馬鹿とか,和歌山とか,とか,とか.

円の分割

いきなりですが問題です.

次の画像をご覧ください.

これは,分割数nを3から32まで変化させ,円をn等分して互い違いに並べてみると,nが大きくなるにつれて平行四辺形(あるいは長方形)に近づく,というのを確認するためのGIFアニメーションです.一番左に置く扇形の,円の中心になる位置は,赤い丸を打ち,共通にしています.
すべての扇形がはみ出ることなく,表示させるには,画像の幅と高さをいくらにすればいいでしょうか.なお,円の半径をr,円周率をMath::PIとします.

さっそくですが解答です.Rubyの式として書くと,幅width,高さheightはそれぞれ,次のようになります.
width = (r * (Math.sin(Math::PI / 3) + Math::PI)).ceil
height = (r * (2 - Math.cos(Math::PI / 3))).ceil
(あるいは,height = (r * 1.5).ceil)
「Math::PI / 3」は,3分割したとき,赤い丸より左方向に必要な幅と下方向に必要な高さを,それぞれ算出するためのものです*1.またwidthの式に関して,sinの値と円周率を足しているのは不気味ですが,「r * Math::PI」だけを取り出してみると,これは,昨日付で記した「半径×円周率」を表しています.


円の面積に関連して,いくつかの方法で円を分割するプログラムを,Rubyスクリプトとして作成しました.コードを整備してから公開します.

*1:このときの画像(静止画)は,よりご覧ください.