以下の内容はhttps://sangaku0418.hatenablog.com/entry/2024/06/16/150051より取得しました。


算額(その1070)

九十六 岩手県大船渡市立根町 気仙安養寺稲荷堂 文政5年(1822)

山村善夫:現存 岩手の算額,昭和52年1月30日,熊谷印刷,盛岡市. http://www.wasan.jp/yamamura/yamamura.html
キーワード:円4個,直角三角形,正方形
#Julia #SymPy #算額 #和算 #数学


正方形の中に直角三角形と,甲円,乙円,丙円,丁円を容れる。正方形の一辺の長さが 2 寸のとき,4 個の円の和はいかほどか。正方形の一辺の長さは弦(直角三角形の斜辺)の 4/5 である。

最後の一文は,条件なのかヒントなのか?

正方形の一辺の和を \(a\)
正方形の辺上にある正三角形の頂点座標を \( (b, a), (0, c)\)
直角三角形の 3 辺の長さを \(ab, bc, ca\)
甲円の半径と中心座標を \(r_1, (a - r_1, a - r_1)\)
乙円の半径と中心座標を \(r_2, (r_2, r_2)\)
丙円の半径と中心座標を \(r_3, (x_3, y_3)\)
丁円の半径と中心座標を \(r_4, (r_4, a - r_4)\)
とおき,以下の連立方程式を解く。

11 元連立方程式であるが,eq1〜eq9 までの条件式は簡単なものなので,SymPy でも簡単に 9 元連立方程式の解 \(b, c, ab, bc, ca, r_1, r_2, r_3, r_4\) を求めることができる。
残るパラメータ \(x_3, y_3\) は eq10, eq11 の連立方程式を解けばよい。

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

using SymPy

@syms a::positive, b::positive, c::positive,
     ab::positive, bc::positive, ca::positive,
     r1::positive, r2::positive, r3::positive, r4::positive,
     x3::positive, y3::positive;
eq1 = bc^2 + ca^2 - ab^2
eq2 = (a - b) + a - ab - 2r1
eq3 = c + a - ca - 2r2
eq4 = bc + ca - ab - 2r3
eq5 = b + (a - c) - bc - 2r4
eq6 = ( (a - b) + a + ab)*r1 + (c + a + ca)*r2 + ( bc + ca + ab)*r3 + (b + (a - c) + bc)*r4 - 2a^2
eq6 = 4ab/5 - a
eq7 = (a - b)^2 + a^2 - ab^2
eq8 = c^2 + a^2 - ca^2
eq9 = b^2 + (a - c)^2 - bc^2
eq10 = dist2(a, 0, 0, c, x3, y3, r3)
eq11 = dist2(a, 0, b, a, x3, y3, r3)
res = solve([eq1, eq2, eq3, eq4, eq5, eq6, eq7, eq8, eq9], (b, c, ab, bc, ca, r1, r2, r3, r4))[1]

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

4 円の直径の和は \(2(r_1 + r_2 + r_3 + r_4) = 3a/2\) である。\(a = 2\) 寸のとき 4 円の和は 3 寸である。

2(res[6] + res[7] + res[8] + res[9]) |> simplify |> println

   3*a/2

算額の解答はここまで。

以下は,図を描くために丙円の中心座標 \( (x_3, y_3\)) を求める。
\(b, c, r_3\) がわかると,\(x_3, y_3\) もわかる。

b = a/4
c = a/2
r3 = a*(-5 + sqrt(Sym(5)))/8 + sqrt(Sym(5))*a/4
eq10 = dist(a, 0, 0, c, x3, y3) - r3^2
eq11 = dist(a, 0, b, a, x3, y3) - r3^2
(x3, y3) = solve([eq10, eq11], (x3, y3))[2];

\(x_3, y_3\) は短く簡約化できる。

@syms d
apart(x3) |> println

   a*(9/8 - 3*sqrt(5)/8)

y3 |> simplify |> sympy.sqrtdenest |> println

   a*(7 - sqrt(5))/8

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

function draw(more=false)
   pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   a = 2
   (b, c, ab, bc, ca, r1, r2, r3, r4) = a .* (1/4, 1/2, 5/4, √5/4, √5/2, 1/4, (3 - √5)/4, (√5 - 5)/8 + √5/4, (3 - √5)/8)
   (x3, y3) = a .* ( (9 - 3√5)/8, (7 - √5)/8)
   plot([0, a, a, 0, 0], [0, 0, a, a, 0], color=:green, lw=0.5)
   plot!([0, a, b, 0], [c, 0, a, c], color=:blue, lw=0.5)
   circle(a - r1, a - r1, r1)
   circle(r2, r2, r2, :green)
   circle(x3, y3, r3, :magenta)
   circle(r4, a - r4, r4, :purple)
   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, 0, " a", :green, :left, :bottom, delta=delta/2)
       point(b, a, " (b,a)", :green, :center, :bottom, delta=delta/2)
       point(0, c, "c ", :green, :right, :vcenter)
       point(a - r1, a - r1, "甲円:r1,(a-r1,a-r1)", :red, :center, delta=-delta/2)
       point(r2, r2, "乙円:r2,(r2,r2)", :green, :center, delta=-delta/2)
       point(x3, y3, "丙円:r3,(x3,y3)", :magenta, :center, delta=-delta/2)
       point(r4, a - r4, "丁円:r4\n(r4,a-r4)", :purple, :center, :bottom, delta=delta/2)
       plot!(xlims=(-4delta, a + 3delta))
   end
end;</p


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




以上の内容はhttps://sangaku0418.hatenablog.com/entry/2024/06/16/150051より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14