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


算額(その0927)

百三十五 群馬県安中市鷺宮 咲前神社 明治20年(1887)

群馬県和算研究会:群馬の算額,上武印刷株式会社,高崎市,1987年3月31日.

「算額」第三集 全国調査,香川県算額研究会.(香川県立図書館蔵)

キーワード:円5個,直角三角形
#Julia #SymPy #算額 #和算 #数学


直角三角形内に大円,小円,等円を容れる。鈎,股がそれぞれ 3 寸,4 寸,大円の直径が 2 寸のとき,等円の直径はいかほどか。

鈎,股,弦を \(a,\ b,\ c\)
大円の半径と中心座標を \(r_1,\ (r_1,\ r_1)\)
小円の半径と中心座標を \(r_2,\ (x_2,\ r_2)\)
等円の半径と中心座標を \(r_3,\ (x_2,\ r_2),\ (x_3,\ y_3)\)
とおき,以下の連立方程式を解く。

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

using SymPy
@syms a::positive, b::positive, c::positive,
     r1::positive, r2::positive, x2::positive,
     r3::positive, x3::positive, y3::positive
# (a, b, r1) = (Sym(3), Sym(4), 2//2)
c = sqrt(a^2 + b^2)
r1 = (a + b - c)//2
r2 = 3r3
eq1 = a*x2 + (b + c)r2 - a*b
eq2 = (x3 - r1)^2 + (r1 - y3)^2 - (r1 - r3)^2 |> expand
eq3 = (x2 - r1)^2 + (r1 - r2)^2 - (r1 + r3)^2 |> expand
eq4 = r2*(b - x3) - y3*(b - x2);
# solve([eq1, eq2, eq3, eq4], (x2, r3, x3, y3))[2]

eq1 を解いて \(x_2\) を求める。

ans_x2 = solve(eq1, x2)[1]
ans_x2 |> println

   (a*b - 3*b*r3 - 3*r3*sqrt(a^2 + b^2))/a

eq4 に \(ans_{x2}\) を代入して \(y_3\) を求める。

ans_y3 = solve(eq4(x2 => ans_x2), y3)[1]
ans_y3 |> println

   a*(b - x3)/(b + sqrt(a^2 + b^2))

eq3 に \(ans_{x2}\) を代入して \(r_3\) を求める。

eq13 = eq3(x2 => ans_x2) |> simplify
ans_r3 = solve(eq13, r3)[1] |> simplify
ans_r3 |> println

   a*(7*a^2 + a*b - 7*a*sqrt(a^2 + b^2) - 8*a*sqrt(a^2 - a*sqrt(a^2 + b^2) + b^2) + 6*b^2 + 6*b*sqrt(a^2 + b^2))/(2*(17*a^2 + 18*b^2 + 18*b*sqrt(a^2 + b^2)))

eq2 に \(ans_{y3},\ ans_{x2},\ ans_{r3}\) を代入して \(x_3\) を求める。

eq12 = eq2(y3 => ans_y3, x2 => ans_x2, r3 => ans_r3) |> simplify
ans_x3 = solve(eq12, x3)[2] |> simplify;

ans_x2 = ans_x2(r3 => ans_r3);
ans_y3 = ans_y3(x3 => ans_x3);

\(x_2,\ x_3,\ y_3\) は非常に長い式になるが, \(r_3\) は程々の長さである。

# ans_x2 |> println
ans_r3 |> println
# ans_x3 |> println
# ans_y3 |> println

   a*(7*a^2 + a*b - 7*a*sqrt(a^2 + b^2) - 8*a*sqrt(a^2 - a*sqrt(a^2 + b^2) + b^2) + 6*b^2 + 6*b*sqrt(a^2 + b^2))/(2*(17*a^2 + 18*b^2 + 18*b*sqrt(a^2 + b^2)))

ans_x2(a => 3, b => 4).evalf() |> println
ans_r3(a => 3, b => 4).evalf() |> println
ans_x3(a => 3, b => 4).evalf() |> println
ans_y3(a => 3, b => 4).evalf() |> println

   2.14429208725912
   0.206189768082320
   1.75307450884191
   0.748975163719364

\(a,\ b\) に特定の値を代入しておけば,自動的に連立方程式を解くことができる。

(x2, r3, x3, y3) =  (77/89 + 36*sqrt(10)/89, 31/89 - 4*sqrt(10)/89, 87*sqrt(10)/445 + 101/89, 85/89 - 29*sqrt(10)/445)

   (2.1442920872591196, 0.20618976808232004, 1.753074508841908, 0.748975163719364

いずれにしろ,鈎 = 3 寸,股 = 4 寸のとき,等円の直径は 2*0.20618976808232004 = 0.41237953616464007 寸である。

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

function draw(more=false)
   pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   (a, b) = (3, 4)
   (x2, r3, x3, y3) =  (2.14429208725912, 0.206189768082320, 1.75307450884191, 0.748975163719364)
   c = sqrt(a^2 + b^2)
   r1 = (a + b - c)/2
   r2 = 3r3
   @printf("a = %g;  b = %g;  r1 = %g;  x2 = %g;  r3 = %g;  x3 = %g;  y3 = %g\n", a, b, r1, x2, r3, x3, y3)
   plot([0, b, 0, 0], [0, 0, a, 0], color=:green, lw=0.5)
   circle(r1, r1, r1)
   circle(x2, r2, r2, :blue)
   circle(x2, r2, r3, :magenta)
   circle(x3, y3, r3, :magenta)
   circle(2x2 - x3, 2r2 - y3, r3, :magenta)
   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(r1, r1, "大円:r1,(r1,r1)", :red, :center, delta=-delta/2)
       point(x3, y3, "等円:r3,(x3,y3) ", :black, :right, :vcenter)
       point(x2, r2, "小円:r2,(x2,r2)", :black, :left, :bottom, delta=delta, deltax=-3delta)
       point(b, 0, " b", :green, :left, :bottom, delta=delta/2)
       point(0, a, " a", :green, :left, :bottom, delta=delta/2)
   end
end;


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




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

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