算額あれこれ

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

算額(その2157)

山形県鶴岡市羽黒町 出羽三山神社(羽黒山神社) 文政6年(1823)

東北大学総合知デジタルアーカイブ
出羽羽黒山算額(第10問)
https://touda.tohoku.ac.jp/portal/item/10010000022927
キーワード:円5個,直線上
#Julia, #SymPy, #算額, #和算


直線上に 5 個の円が載っている。直線から戊円のてっぺんまでの高さが与えられたとき,戊円の直径はいかほどか。

図形としては「算額(その0394)」と同じであるが,結果ははるかに「面白い」。

甲円の半径と中心座標を \(r_1,\ (x_1,\ r_1)\)
乙円の半径と中心座標を \(r_2,\ (0,\ r_2)\)
丙円の半径と中心座標を \(r_3,\ (x_3,\ r_3)\)
丁円の半径と中心座標を \(r_4,\ (x_4,\ r_4)\)
戊円の半径と中心座標を \(r_5,\ (x_5,\ y_5)\)
高さを \(h = y_5 + r_5\)
とおき,以下の連立方程式の数値解を求める。

include("julia-source.txt");  # julia-source.txt ソース
function driver(h)
    function H(u)
        function parameters()
            x1 = 2sqrt(r1*r2)
            x4 = 2sqrt(r2*r4)
            x3 = x4 + 2sqrt(r4*r3)
            y5 = h - r5
            # 算法助術公式47
            eq1 = (r3 + r4)*h - (2r3*r4 + 2sqrt(2r3*r4*r5*h))
            eq2 = x1 - (x4 + 2sqrt(r4*r3) + 2sqrt(r3*r1))
            eq3 = (x1 - x5)^2 + (r1 - y5)^2 - (r1 + r5)^2
            eq4 = x5^2 + (r2 - y5)^2 - (r2 + r5)^2
            eq5 = (x5 - x4)^2 + (y5 - r4)^2 - (r4 + r5)^2
            eq6 = (x5 - x3)^2 + (y5 - r3)^2 - (r3 + r5)^2
            return [eq1, eq2, eq3, eq4, eq5, eq6]
        end;
        (r1, r2, r3, r4, r5, x5) = u
        return parameters()
    end;
    iniv = BigFloat[1.77, 1.65, 0.29, 0.29, 0.25, 1.67].*h
    res = nls(H, ini=iniv)
    res[2] || println("収束していない")
    return res[1]
end;
h = 1pi
(r1, r2, r3, r4, r5, x5) = driver(h)
(r5, h, r5/h)

    (0.7853981633974483, 3.141592653589793, 0.25)

高さとしてどんな値を与えても,戊円の直径は正確に,高さの 1/2 になる。

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

function draw(h, more=false)
    pyplot(size=(500, 500), grid=false, aspectratio=1, showaxis=false, label="", fontfamily="IPAMincho")
    (r1, r2, r3, r4, r5, x5) = driver(h)
    println(2r5)
    @printf("戊円の直径 %.15g は,高さ %.15g の %.15g 倍である。\n", 2r5, h, 2r5/h)
    x1 = 2sqrt(r1*r2)
    x3 = 2sqrt(r2*r4) + 2sqrt(r4*r3)
    x4 = 2sqrt(r2*r4)
    y5 = h - r5
    plot()
    circle(x1, r1, r1)
    circle(0, r2, r2, :blue)
    circle(x3, r3, r3, :magenta)
    circle(x4, r4, r4, :orange)
    circle(x5, y5, r5, :green)
    if more
        delta = (fontheight = (ylims()[2]- ylims()[1]) / 500 * 10 * 2) /3  # size[2] * fontsize * 2
        hline!([0], color=:black, lw=0.5)
        vline!([0], color=:gray80, lw=0.5)
        point(x1, r1, "甲円:r1,(x1,r1)", :red, :center, delta=-delta)
        point(0, r2, "乙円:r2,(0,r2)", :blue, :center, delta=-delta)
        point(x3, r3, "丙円:r3,(x3,r3)", :magenta, :left, delta=-7delta)
        point(x4, r4, "丁円:r4,(x4,r4)", :orange, :right, delta=-7delta)
        point(x5, y5, "戊円:r5,(x5,y5)", :green, :left, :bottom, deltax=6delta)
        dimension_line(x5, 0, x5, h, "高さ", :black, :left, delta=-delta, deltax=2delta, length=4delta)
    end
end;
draw(pi, true)

    1.5707963267948966
    戊円の直径 1.5707963267949 は,高さ 3.14159265358979 の 0.5 倍である。

 

「算額あれこれ」の全ページの索引


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