算額あれこれ

算額問題をコンピュータで解きます

算額(その1809)

香川県善通寺市中村町 木熊野神社 安政5年(1858)

本田益夫:木熊野神社算額の問題解説(抄録),山陽和算研究会会誌,第29号,平成年5月20日.(香川県立図書館蔵)
キーワード:円弧
#Julia #SymPy #算額 #和算 #数学


奇数個の等円を重ねて描くとき,等円の直径と個数を与えて径線(図の AB の長さ)を得る術を述べよ。


等円の半径を \(r\),個数を \(n\) とおき,以下のように計算する。

等円の中心を結んでできるのは,正 \(n\) 角形である。

include("julia-source.txt");  # julia-source.txt ソース

using SymPy
@syms r::positive, n;

∠DOC = π/n
AB = AO + OB = AO + 2OC = AO + 2OD*cos(∠DOC) = AO + 2OD*cos(π/n) = 2r + 2r*cos(π/n)

# 径線の長さ
AB = 2r + 2r*cos(π/n) |> factor

 \(\displaystyle 2 r \left(\cos{\left(\frac{\pi}{n} \right)} + 1\right)\)

等円の個数が \(n = 5\),半径が \(r = 1/2\) のとき,径線の長さは 1.80901699437495 である。

AB(n => 5, r => 1/2).evalf() |> println

    1.80901699437495

和算家は三角関数の代わりに,「角中径率」を使った。
五角角中径率 = OD/DE = \(\sqrt{\sqrt{0.8} + 2}/2\)

五角角中径率 = sqrt(sqrt(Sym(4)/5) + 2)/2  # sqrt(sqrt(0.8) + 2)/2
五角角中径率 |> display
五角角中径率.evalf() |> println

 \(\displaystyle \frac{\sqrt{\frac{2 \sqrt{5}}{5} + 2}}{2}\)

    0.850650808352040

OC = sqrt(OD^2 - CD^2)
AB = AO + 2OC = 2r + 2sqrt(OD^2 - CD^2) = 2r + 2sqrt(OD^2 - (DE/2)^2) = 2r + 2sqrt(OD^2 - (OD/五角角中径率/2)^2)
= 2r + 2sqrt(r^2 - (r/(2*五角角中径率))^2)

AB = 2r + 2sqrt(r^2 - (r/(2*五角角中径率))^2) |> factor

 \(\displaystyle \frac{r \left(\sqrt{2} \sqrt{2 \sqrt{5} + 5} + 2 \sqrt{\sqrt{5} + 5}\right)}{\sqrt{\sqrt{5} + 5}}\)

AB(n => 5, r => 1/2).evalf() |> println

    1.80901699437495

術は以下の通りである。

@syms 等円径
五角角中径率 = sqrt(sqrt(Sym(4)/5) + 2)/2
# 五角角中径率 = sqrt(sqrt(0.8) + 2)/2
天 = 2五角角中径率
径線 = (sqrt(天^2 - 1)/天 + 1)*等円径

 \(\displaystyle 等円径 \left(\frac{\sqrt{\frac{2 \sqrt{5}}{5} + 1}}{\sqrt{\frac{2 \sqrt{5}}{5} + 2}} + 1\right)\)

径線(等円径 => 1).evalf() |> println

 1.80901699437495

描画関数プログラムのソースを見る

function draw(r, n, more=false)
    pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
    plot()
    polygon(0, 0, r, n, color=:gray80)
    for i = 0:n - 1
        θ = 90 + i*(360/n)
        circle(r*cosd(θ), r*sind(θ), r, beginangle=θ - 360/n, endangle=θ + 180)
        end
    if more     
        delta = (fontheight = (ylims()[2]- ylims()[1]) / 500 * 10 * 2) /3  # size[2] * fontsize * 2
        hline!([0], color=:gray80, lw=0.5)
        vline!([0], color=:gray80, lw=0.5)
        point(0, 2r, "A", :red, :center, :bottom, delta=delta/2)
        point(0, r, "等円:r,(0,r)", :red, :center, :bottom, delta=delta/2, deltax=-2delta)
        point(0, 0, "O ", :red, :right, :bottom, delta=delta/2)
        point(0, -2r*cosd(180/n), "B", :red, :center, delta=-delta/2)
        point(0, -r*cosd(180/n), "C", :red, :center, delta=-delta/2)
        point(r*sind(180/n), -r*cosd(180/n), "D", :red, :center, delta=-delta/2)
        point(-r*sind(180/n), -r*cosd(180/n), "E", :red, :center, delta=-delta/2)
    end
end;

draw(1/2, 5, true)


以下のアイコンをクリックして応援してください