以下の内容はhttps://sangaku0418.hatenablog.com/entry/2024/05/03/143740より取得しました。


算額(その0907)

一〇〇 桶川市小針領家 氷川諏訪神社 明治30年(1897)

埼玉県立図書館:埼玉県史料集 第二集『埼玉の算額』,昭和44年,誠美堂印刷所,埼玉県与野市.
キーワード:円3個,正方形
#Julia #SymPy #算額 #和算 #数学


正方形の中に甲円 1 個,乙円 2 個を容れる。正方形の一辺の長さが 2 寸 5 分,乙円の直径が 7 分のとき,甲円の直径はいかほどか。

正方形の一辺の長さと頂点座標を \(a,(a/\sqrt{2},0),\ (0,\ a/\sqrt{2}),\ (-a/\sqrt{2},\ 0),\ (0,\ -a/\sqrt{2})\)
甲円の半径と中心座標を \(r_1,\ (0,\ y_1)\)
乙円の半径と中心座標を \(r_2,\ (r_2,\ y_2);\ y_2 < 0\)
とおき,以下の連立方程式を立てる。

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

using SymPy
@syms a::positive, a2::positive, r1::positive,
     y1::positive, r2::positive, y2::negative
a2 = a/√Sym(2)
eq1 = r2^2 + (y1 - y2)^2 - (r1 + r2)^2
eq2 = dist2(a2, 0, 0, a2, 0, y1, r1)
eq3 = dist2(a2, 0, 0, -a2, r2, y2, r2);
eq1 |> println
eq2 |> println
eq3 |> println

   r2^2 - (r1 + r2)^2 + (y1 - y2)^2
   a^2/4 - sqrt(2)*a*y1/2 - r1^2 + y1^2/2
   a^2/4 - sqrt(2)*a*r2/2 + sqrt(2)*a*y2/2 - r2^2/2 - r2*y2 + y2^2/2

SymPy の性能上,一度に解くことができないので,逐次解いてゆく。
まず eq2 を解き,\(y_1\) を求める。

ans_y1 = solve(eq2, y1)[1]
ans_y1 |> println

   sqrt(2)*(a/2 - r1)

eq1, eq3 に代入する。

eq11 = eq1(y1 => ans_y1) |> expand
eq11 |> println
eq13 = eq3(y1 => ans_y1) |> expand
eq13 |> println

   a^2/2 - 2*a*r1 - sqrt(2)*a*y2 + r1^2 - 2*r1*r2 + 2*sqrt(2)*r1*y2 + y2^2
   a^2/4 - sqrt(2)*a*r2/2 + sqrt(2)*a*y2/2 - r2^2/2 - r2*y2 + y2^2/2

eq13 を解き,\(y_2\) を求める。この式は \(a,\ r_2\) だけを含むので \(y_2\) は決定される。

ans_y2 = solve(eq13, y2)[1]
ans_y2 |> println

   -sqrt(2)*a/2 + r2 + sqrt(2)*r2

eq11 に \(y_1,\ y_2\) を代入する。

eq21 = eq11(y1 => ans_y1, y2 => ans_y2) |> simplify
eq21 |> println

   2*a^2 - 4*a*r1 - 4*a*r2 - 2*sqrt(2)*a*r2 + r1^2 + 2*r1*r2 + 2*sqrt(2)*r1*r2 + 2*sqrt(2)*r2^2 + 3*r2^2

eq21 は \(a,\ r_2\) だけを含むので \(r_1\) は決定される。

ans_r1 = solve(eq21, r1)[1]
ans_r1 |> println

   -sqrt(2)*sqrt(a)*sqrt(a - sqrt(2)*r2) + 2*a - sqrt(2)*r2 - r2

\(r_1\) が決まれば,逆順にたどり,\(y_1\) が決定される。

r2 = 0.7/2 # 半径を与える
a = 2.5
r1 = -sqrt(2)*sqrt(a)*sqrt(a - sqrt(2)*r2) + 2*a - sqrt(2)*r2 - r2
y2 = -sqrt(2)*a/2 + r2 + sqrt(2)*r2
y1 = sqrt(2)*(a/2 - r1)
(r1, y1, y2)
# (0.9887772739600998, 0.3694247219656983, -0.9227922061357855)

   (0.9887772739600998, 0.3694247219656983, -0.9227922061357855)

甲円の直径は \(2\left(2a - (1 + \sqrt{2})r_2 - \sqrt{2}\sqrt{a^2 - \sqrt{2}r_2 a}\right)\)

正方形の一辺の長さ \(a\) が 2 寸 5 分,乙円の直径 \(r_2\) が 7 分のとき,甲円の直径は 1.9775545479202004 寸である。

r2 = 0.7/2 # 半径を与える
a = 2.5
2(2a - (1 + √2)r2 -√2sqrt(a^2 - √2r2*a))

   1.9775545479202004

その他のパラメータは以下のとおりである。
\(a = 2.5;\ r_2 = 0.35;\ r_1 = 0.988777;\ y_1 = 0.369425;\ y_2 = -0.922792\)

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

function draw(more=false)
   pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   r2 = 0.7/2
   a = 2.5
   r1 = -sqrt(2)*sqrt(a)*sqrt(a - sqrt(2)*r2) + 2*a - sqrt(2)*r2 - r2
   y2 = -sqrt(2)*a/2 + r2 + sqrt(2)*r2
   y1 = sqrt(2)*(a/2 - r1)
   a2 = a/√2
   @printf("正方形の一辺の長さ = %g,乙円の直径 = %g のとき,甲円の直径は %g である。\n", a, 2r2, 2r1)
   @printf("a = %g;  r2 = %g;  r1 = %g;  y1 = %g;  y2 = %g\n", a, r2, r1, y1, y2)
   plot([a2, 0, -a2, 0, a2], [0, a2, 0, -a2, 0], color=:blue, lw=0.5, xlims=(-2, 2.2))
   circle(0, y1, r1, :green)
   circle2(r2, y2, r2)
   if more        
       delta = (fontheight = (ylims()[2]- ylims()[1]) / 500 * 10 * 2) /3  # size[2] * fontsize * 2
       hline!([0], color=:black, lw=0.5)
       vline!([0], color=:gray80, lw=0.5)
       point(0, a/√2, " a/√2", :blue, :left, :bottom, delta=delta/2)
       point(a/√2, 0, " a/√2", :blue, :left, :bottom, delta=delta/2)
       point(0, y1, "甲円:r1,(0,y1)", :green, :center, delta=-delta/2)
       point(r2, y2, "乙円:r2\n(r2,y2)", :red, :center, delta=-delta/2)
   end
end;


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




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

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