算額あれこれ

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

算額(その1020)

20 岩手県奥州市前沢生母長根(旧前沢町生母字二子) 月山神社 明治11年(1878)

安富有恒:和算—岩手の現存算額のすべて,青磁社,東京都,1987.
http://www.wasan.jp/iwatenosangaku_yasutomi.pdf
キーワード:円6個,直角三角形
#Julia #SymPy #算額 #和算 #数学


直角三角形の中に大円 1 個,等円 5 個を容れる。大円の直径が 120 寸,股(直角を挟む長い方の辺)が 240 寸のとき,等円の直径はいかほどか。

直角三角形の股を \(a\),鈎(直角を挟む短い方の辺)を \(b\)
大円の半径と中心座標を \(r_1, (r_1, r_1)\)
等円の半径と中心座標を \(r_2, (9r_2, r_2)\)
とおき,以下の連立方程式を解く。

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

using SymPy
@syms a::positive, r1::positive, r2::positive, b::positive
eq1 = r2/(a - 9r2) - r1/(a - r1)
eq2 = a + b - sqrt(a^2 + b^2) - 2r1
res = solve([eq1, eq2], (r2, b))[1];

# r2 等円の半径
@show(res[1])

    res[1] = a*r1/(a + 8*r1)

 \(\displaystyle \frac{a r_{1}}{a + 8 r_{1}}\)

res[1](r1 => 120//2, a => 240) |> println

    20

等円の直径は \(2r_2 = \displaystyle \frac{2a r1}{a + 8r_1}\) である。
大円の直径が 120 寸,股が 240 寸のとき,等円の直径は 40 寸である。

術は以下の通りで,前述の式に一致する。

@syms 大円径, 股
大円径/(4大円径/股 + 1)

    \(\displaystyle \frac{大円径}{\frac{4 \cdot 大円径}{股} + 1}\)

# b 鈎
@show(res[2])

    res[2] = 2*r1*(a - r1)/(a - 2*r1)

 \(\displaystyle \frac{2 r_{1} \left(a - r_{1}\right)}{a - 2 r_{1}}\)

res[2](r1 => 120//2, a => 240) |> println

    180

鈎は \(\displaystyle \frac{2r_1(a - r_1)}{a - 2r_1}\) である。
大円の直径が 120 寸,股が 240 寸のとき,鈎は 180 寸である。

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

function draw(r1, a, more=false)
    pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
    r2 = a*r1/(a + 8r1)
    b = 2*r1*(a - r1)/(a - 2*r1)
    @printf("大円の直径が %g, 股が %g のとき,等円の直径は %g,鈎は %g である。\n", 2r1, a, 2r2, b)
    plot([0, a, 0, 0], [0, 0, b, 0], color=:green, lw=0.5)
    circle(r1, r1, r1)
    for i = 1:2:9
        circle(i*r2, r2, r2, :blue)
    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(r1, r1, "大円:r1,(r1,r1)", :red, :center, delta=-delta/2)
        point(9r2, r2, "等円:r2\n(9r2,r2)", :blue, :center, :bottom, delta=delta/2)
        point(a, 0, "a", :green, :left, :bottom, delta=delta/2)
        point(0, b, " b", :green, :left, :bottom, delta=delta/2)
    end
end;

draw(120/2, 240, true)


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