算額あれこれ

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

算額(その1406)

百四十三 群馬県榛名町榛名山 榛名神社 明治33年(1900)

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


外円の中に,楕円と 2 個の交わる甲円を容れ,それらによって区切られた領域に乙円,丙円を 2 個ずつ容れる。乙円の直径が 1 寸で,楕円の短径がもっとも大きくなる(乙円が曲率円になる)ときの丙円の直径はいかほどか。

外円の半径と中心座標を \(R, (0, 0)\)
甲円の半径と中心座標を \(r_1, (0, r_3)\)
乙円の半径と中心座標を \(r_2, (R - r_2, 0)\)
丙円の半径と中心座標を \(r_3, (R - r_3)\)
楕円の長半径,短半径と中心座標を \(R, R - 2r_3, (0, 0)\)
とおき,以下の連立方程式を解く。

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

@syms R, r1, r2, r3
r1 = R - r3 
eq1 = (R - r2)^2 + r3^2 - (r1 + r2)^2  # 乙円は甲円と外接
eq2 = (R - 2r3)^2/R - r2  # 乙円は楕円の曲率円
res = solve([eq1, eq2], (r3, R))[3]  # 3 of 3

    (r2*(sqrt(2) + 2)/2, r2*(2*sqrt(2) + 3))

丙円の半径 r3 は,乙円の半径 r2 の (√2 + 2)/2 倍である。
乙円の直径が 1 寸で,楕円の短径がもっとも大きくなる(乙円が曲率円になる)とき,丙円の直径は (√2 + 2)/2 = 1.7071067811865475 寸である。

術では「天 = √8 + 3; (天 - √天)*乙円径/2」と複雑な計算式を提示しているが,「(√2/2 + 1)*乙円径」と簡約化できる。

全てのパラメータは以下のとおりである。

r2 = 0.5;  r3 = 0.853553;  R = 2.91421;  r1 = 2.06066

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

function draw(r2, more)
    pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
    R = r2*(2√2 + 3)
    r3 = r2*(√2 + 2)/2
    r1 = R - r3
    @printf("乙円の直径が %g のとき,丙円の直径は %g である。\n", 2r2, 2r3)
    @printf("r2 = %g;  r3 = %g;  R = %g;  r1 = %g\n", r2, r3, R, r1)
    plot()
    circle(0, 0, R)
    circle22(0, R - r3, r3, :blue)
    circle22(0, r3, r1, :green)
    circle(R - r2, 0, r2, :magenta)
    ellipse(0, 0, R, R - 2r3, color=: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(0, r3, "甲円:r1,(0,r3)", :green, :center ,delta=-delta/2)
        point(R - r2, 0, "乙円:r2\n(R-r2,0)", :magenta, :center, :bottom, delta=delta/2)
        point(0, R - r3, "丙円:r3,(0,R-r3)", :blue, :center, delta=-delta/2)
        point(0, R, "R", :red, :center, :bottom, delta=delta/2)
        point(R, 0, " R", :red, :left, :vcenter)
        point(0, R - 2r3, "R-2r3", :orange, :center, :bottom, delta=delta/2)
    end
end;

draw(1/2, true)


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