算額あれこれ

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

算額(その1728)

山形県山形市山寺 立石寺根本堂 大正3年(1914)

「算額」第三集 全国調査,香川県算額研究会.(香川県立図書館蔵)
キーワード:円5個,菱形,長方形
#Julia #SymPy #算額 #和算 #数学


長方形の中に菱形 1 個,甲円 2 個,乙円 3 個を容れる。乙円の直径が与えられたとき,甲円の直径を求める術を述べよ。

長方形の長辺と短辺を \(2a, b\)
菱形の頂点と長方形の短辺の接点座標を \( (a, c)\)
甲円の半径と中心座標を \(r_1, (a - r_1, r_1)\)
乙円の半径と中心座標を \(r_2, (0, r_2), (r2, c)\)
とおき,以下の連立方程式を解く。

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

using SymPy

@syms a, b, c, r1, r2
eq1 = (a - r1)^2 + (r1 - r2)^2 - (r1 + r2)^2
eq2 = r2/(a - r2) - (b - c)/sqrt( (b - c)^2 + a^2)
eq3 = (c - 2r2) - (b - c)
eq4 = dist2(0, 2r2, a, c, a - r1, r1, r1)/a;

res = solve([eq1, eq2, eq3], (a, b, c))[4]  # 4 of 4

    (r1 + 2*sqrt(r1*r2), 2*r2*(r1^2 + 2*r1*r2 + 4*r1*sqrt(r1*r2) - 4*r2*sqrt(r1*r2) + sqrt(r1*(r1^3 + 22*r1^2*r2 + 8*r1^2*sqrt(r1*r2) - 8*r1*r2^2 - 16*r2^2*sqrt(r1*r2) + 20*(r1*r2)^(3/2))))/(r1^2 + 2*r1*r2 + 4*r1*sqrt(r1*r2) - 4*r2*sqrt(r1*r2)), r2*(2*r1^2 + 4*r1*r2 + 8*r1*sqrt(r1*r2) - 8*r2*sqrt(r1*r2) + sqrt(r1*(r1^3 + 22*r1^2*r2 + 8*r1^2*sqrt(r1*r2) - 8*r1*r2^2 - 16*r2^2*sqrt(r1*r2) + 20*(r1*r2)^(3/2))))/(r1^2 + 2*r1*r2 + 4*r1*sqrt(r1*r2) - 4*r2*sqrt(r1*r2)))

eq14 = eq4(a => res[1], c => res[3]) |> simplify |> numerator

\( \displaystyle r_{2} \left(- 4 r_{1}^{2} \left(r_{1}^{2} + 2 r_{1} r_{2} + 4 r_{1} \sqrt{r_{1} r_{2}} - 4 r_{2} \sqrt{r_{1} r_{2}}\right)^{2} + 4 r_{1} \left(r_{2} - \sqrt{r_{1} r_{2}}\right) \left(r_{1}^{2} + 2 r_{1} r_{2} + 4 r_{1} \sqrt{r_{1} r_{2}} - 4 r_{2} \sqrt{r_{1} r_{2}}\right) \left(2 r_{1}^{2} + 4 r_{1} r_{2} + 8 r_{1} \sqrt{r_{1} r_{2}} - 8 r_{2} \sqrt{r_{1} r_{2}} + \sqrt{r_{1} \left(r_{1}^{3} + 22 r_{1}^{2} r_{2} + 8 r_{1}^{2} \sqrt{r_{1} r_{2}} - 8 r_{1} r_{2}^{2} - 16 r_{2}^{2} \sqrt{r_{1} r_{2}} + 20 \left(r_{1} r_{2}\right)^{\frac{3}{2}}\right)}\right) + r_{2} \left(- r_{1} + 2 \sqrt{r_{1} r_{2}}\right) \left(2 r_{1}^{2} + 4 r_{1} r_{2} + 8 r_{1} \sqrt{r_{1} r_{2}} - 8 r_{2} \sqrt{r_{1} r_{2}} + \sqrt{r_{1} \left(r_{1}^{3} + 22 r_{1}^{2} r_{2} + 8 r_{1}^{2} \sqrt{r_{1} r_{2}} - 8 r_{1} r_{2}^{2} - 16 r_{2}^{2} \sqrt{r_{1} r_{2}} + 20 \left(r_{1} r_{2}\right)^{\frac{3}{2}}\right)}\right)^{2}\right)\)

# r1
ans_r1 = solve(eq14, r1)[3];  # 3 of 10
ans_r1 |> display
ans_r1 |> println
ans_r1(r2 => 1/2).evalf() |> println

\( \displaystyle \frac{r_{2} \left(17 - \sqrt{33}\right)}{8}\)

    r2*(17 - sqrt(33))/8
    0.703464834591373

甲円の半径は,乙円の半径の \( (17 - \sqrt{33})/8 \) 倍である。

乙円の直径が 1 のとき,甲円の直径は 1.40692966918275 である。

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

function draw(r2, more=false)
    pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
    r1 = r2*(17 - sqrt(33))/8
    t = sqrt(r1*r2)
    u = sqrt(r1*(r1^3 + 22r1^2*r2 + 8r1^2*t - 8r1*r2^2 - 16r2^2*t + 20(r1*r2)^(3/2)))
    v = r1^2 + 2r1*r2 + 4r1*t - 4r2*t
    (a, b, c) = (r1 + 2t, r2*(2v + 2u)/v, r2*(2v + u)/v)
    plot([a, a, -a, -a, a], [0,  b, b, 0, 0], color=:green, lw=0.5)
    plot!([0, a, 0, -a, 0], [2r2, c, b, c, 2r2], color=:blue, lw=0.5)
    circle2(r2, c, r2)
    circle(0, r2, r2)
    circle2(a - r1, r1, r1, :magenta)
    if more
        delta = (fontheight = (ylims()[2]- ylims()[1]) / 500 * 10 * 2) /  3  # size[2] * fontsize * 2
        vline!([0], color=:gray80, lw=0.5)
        hline!([0], color=:gray80, lw=0.5)
        point(a - r1, r1, "甲円:r1,(a-r1,r1)", :magenta, :center, delta=-delta)
        point(0, r2, "乙円:r2,(0,r2)", :red, :center, delta=-delta)
        point(r2, c, "乙円:r2,(r2,c)", :red, :center, delta=-delta)
        point(a, b, "(a,b)", :green, :right, :bottom, delta=delta)
        point(a, c, "(a,c)", :green, :right, :vcenter, deltax=-4delta)
        point(0, 2r2, "2r2", :red, :center, delta=-delta)
    end
end;

draw(1/2, true)


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