算額あれこれ

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

算額(その1700)

三十一 群馬県藤岡市立石 立石神社 文化13年(1816)

群馬県和算研究会:群馬の算額,上武印刷株式会社,高崎市,1987年3月31日.
キーワード:円8個,円弧,長方形
#Julia #SymPy #算額 #和算 #数学


長方形の中に,円弧と大中小の 8 個の円を容れる。長(長方形の横の長さ)が 5 寸のとき平(縦の長さ)はいかほどか。

大円の半径と中心座標を \(r_1,\ (0,\ 0)\)
中円の半径と中心座標を \(r_2,\ (r_1 - r_2,\ 0),\ (r_2 - r_1,\ 0)\)
小円の半径と中心座標を \(r_3,\ (0,\ 0),\ (0,\ r_1 - r_3),\ (a - r_3,\ r_3)\)
円弧の半径と中心座標を \(R,\ (r_1 + R,\ 0)\)
上円の半径と中心座標を \(r_4,\ (r_4,\ y_4)\)
とおき,以下の連立方程式を解く。

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

using SymPy

@syms a::positive, R::positive, r1::positive, r2::positive,
      r3::positive, x3::positive, 長::positive
eq1 = (r1 - r2)^2 + (r1 - r3)^2 - (r2 + r3)^2
eq2 = ( (r1 + R) - (a - r3))^2 + r3^2 - (R - r3)^2
eq3 = (r1 + R - a)^2 + r1^2 - R^2
eq4 = a + r1 - 長
eq5 = r1 - 2r2 + r3
res = solve([eq1, eq2, eq3, eq4, eq5], (a, R, r1, r2, r3))[1]

    (3*長/5, 長/2, 2*長/5, -長/5 + sqrt(5)*長/5, 長*(-4/5 + 2*sqrt(5)/5))

# r1
res[3]

    \(\displaystyle \frac{2 長}{5}\)

平 = \(2r_1\) ゆえ,平は長 の 4/5 = 0.8 倍である。
長が 5 寸のとき,平は 4 寸である。

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

function draw(長, more)
    pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
    (a, R, r1, r2, r3) = 長.*(3/5, 1/2, 2/5, (√5 - 1)/5, (2√5 - 4)/5)
    x3 = a - r3
    @printf("長が %g のとき,平 = 2r1 = %g\n", 長, 2r1)
    plot([a, a, -r1, -r1, a], [-r1, r1, r1, -r1, -r1], color=:green, lw=0.5)
    circle(0, 0, r1)
    circle2(r1 - r2, 0, r2, :blue)
    circle22(0, r1 - r3, r3, :magenta)
    circle(0, 0, r3, :magenta)
    circle22(x3, r3, r3, :magenta)
    circle(r1 + R, 0, R, :orange)
    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(a, -r1, " (a,-r1)", :green, :left, :vcenter)
        point(r1 + R, 0, "円弧:R,(r1+R,0)", :orange, :center, delta=-delta/2)
        point(0, r1, "r1", :red, :center, :bottom, delta=delta)
        point(0, r1 - r3, " 小円:r3,(0,r1-r3)", :magenta, :left, :vcenter)
        point(a - r3, r3, " 小円:r3,(a-r3,0)", :magenta, :left, :vcenter)
        point(r1 - r2, 0, "中円:r2\n(r1-r2,0)", :blue, :left, delta=-delta, deltax=-3delta)
        point(r3, 0, "r3 ", :magenta, :right, :bottom, delta=delta/2)
        dimension_line(-r1, -r1 - 2delta, a, -r1 - 2delta, "長", :black, :center, delta=-3delta)
        dimension_line(-r1 - 2delta, -r1, -r1 - 2delta, r1, "平", :black, :right, deltax=-2delta)
        xlims!(-r1 - 10delta, r1 + 2R + 2delta)
    end
end;

draw(5, true)


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