算額あれこれ

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

算額(その1480)

41 岩手県一関市滝沢字寺田下 熊野白山滝神社 文久元年(1861)

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


問題文,答,術ともに不明であるが,以下のようなものでもあろう。

半円の中に円弧,大円 1 個,小円 4 個を容れる。小円の直径が与えられたとき,大円の直径を求める術を述べよ。

円弧の半径と中心座標を \(R, (0, 0)\)
大円の半径と中心座標を \(r_1, (0, y + r_1)\)
小円の半径と中心座標を \(r_2, (x_{21}, y + r_2), (x_{22}, y_2)\)
とおき,以下の連立方程式を解く。
ただし,\(R = y + r_1\),半円の半径は \(2r_1\) である。

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

using SymPy
@syms R::positive, y::positive, r1::positive, r2::positive, x21::positive, x22::positive, y2::positive
R = y + r1
eq1 = x21^2 + (y + r2)^2 - (R - r2)^2
eq2 = x22^2 + y2^2 - (R + r2)^2
eq3 = x22^2 + (y2 - y)^2 - (2r1 - r2)^2
eq4 = x21^2 + (r1 - r2)^2 - (r1 + r2)^2
eq5 = x22^2 + (y + r1 - y2)^2 - (r1 + r2)^2
res = solve([eq1, eq2, eq3, eq4, eq5], (y, r1, x21, x22, y2))[1]

    (9*r2/2, 3*r2, 2*sqrt(3)*r2, 4*r2, 15*r2/2)

大円の半径は小円の半径の 3 倍である。

小円の直径が 1 のとき, 円弧,半円,大円の直径は 4, 2, 1.5 である。

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

function draw(r2, more=false)
    pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
    (y, r1, x21, x22, y2) = (9*r2/2, 3*r2, 2*sqrt(3)*r2, 4*r2, 15*r2/2)
    R = y + r1
    @printf("小円の直径が %g のとき, 円弧,半円,大円の直径は %g, %g, %g である。\n", 2r2, 2R, 4r1, 2r1)
    plot()
    θ = atand(y, sqrt(R^2 - y^2))
    circle(0, y, 2r1, :green, beginangle=0, endangle=180)
    circle(0, y + r1, r1, :blue)
    circle(0, 0, R, :magenta, beginangle=θ, endangle=180 - θ)
    circle2(x21, y + r2, r2)
    circle2(x22, y2, r2)
    segment(-2r1, y, 2r1, y)
    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, y, "y", :green, :center, delta=-delta)
        point(sqrt(R^2 - y^2), y, "(sqrt(R^2-y^2),y)", :green, :right, delta=-delta)
        point(0, y + 2r1, "y+2r1", :green, :center, :bottom, delta=delta)
        point(0, y + r1, "大円:r1,(0,y+r1)", :blue, :center, :bottom, delta=delta)
        point(x21, y + r2, "小円:r2\n(x21,y+r2)", :red, :center, :bottom, delta=delta)
        point(x22, y2, "小円:r2\n(x22,y2)", :red, :center, :bottom, delta=delta)
    end
end;

draw(1/2, true)


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