午後のひとときに、数学の問題をプログラミングで解いてみる。




図のように円周上の1点から2直線を引くことで3等分する。
θをプログラミングで求めよ。


シンキングタ~イム
 


プログラミングで求めよとのことですが、流石に数学の知識を必要とするので、まずは数学的に考察してみる。



円の中心から、各交点とを直線で結ぶ。

円周角と中心角の関係より2θ、
残りの2角は等しくπ-θ、
と求まる。

半径を1とすると、円の面積はπである。
3等分ということで、それぞれの面積はπ/3。

π-θを頂角とする斜辺1の二等辺三角形の面積は、二辺夾角からa・b・sin(C)/2を使って、
sin(π-θ)/2=sin(θ)/2
となる。

続いて、2πの角で出来る半径1の扇型の面積は、
(2θ/2π)✕π=θ
となる。

よって、
sin(θ)/2+θ=π/3
を満たすθが求まればよいのだが…
これを代数的ないし幾何的に求めることは厳しい。
ということで、解析的に求めることを考える。

どうやって求めるかというと、二分法だろう。

図もJavascriptでCanvasに描いているので、Javascriptで書いてみる。
θをthetaとか面倒なので、tとして求めてみる。

var t, t_max, t_min, loop;
loop = 100;

t_max = Math.PI/2;

t_min = 0;
while ( loop ) {

    t = (t_max+t_min)/2;

    if ( Math.sin(t)+t < Math.PI/3 ) {

        t_min = t;
    } else {

        t_max = t;

    }

    loop--;
}


まぁ、こんな感じでtを求めることが出来る。

t_maxの初期値をMath.PI/2、つまりπ/2=90˚としているが、πからスタートしても、π/4からスタートしても構わないが、後者は数学的な考察をする必要はあるだろう。
また、loopの初期値を100としているが、2分法なので、変数の2進数による桁数だけあれば十分であるので、64ビットの浮動小数点数ならば64でも十分である。
上記では、出力を全くしていないので、出力は各自に任せる。



rad: 0.5362669789888905
deg: 30.725834588294223˚
という答えが導けました。

プログラムではラディアンで計算しているので、弧度法に変換するには、180/πを掛ける必要があります。

類題として、4等分、5等分、…とやっていっても面白いだろう。

実際問題としては、こんなケーキのカットをしようものなら、喧嘩が絶えないだろう。


ではでは