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


算額(その1015)

3 岩手県花巻市大田 清水寺 明治25年(1892)

安富有恒:和算—岩手の現存算額のすべて,青磁社,東京都,1987.
http://www.wasan.jp/iwatenosangaku_yasutomi.pdf
キーワード:円6個,半円,斜線
#Julia #SymPy #算額 #和算 #数学


半円と斜線で区切られた領域に大円,中円,小円を容れる。小円の直径が与えられたとき,中円の直径を求める術を述べよ。

半円の半径と中心座標を \(R,\ (0,\ 0)\)
大円の半径と中心座標を \(r_1,\ (0,\ r_1)\)
中円の半径と中心座標を \(r_2,\ (x_2,\ r_2)\)
小円の半径と中心座標を \(r_3,\ (0,\ -r_3)\)
小円の中心と中円の中心を結ぶ線分と \(x\) 軸との交点座標を \( (x_0,\ 0)\)
とする。

⊿OCE∽⊿DBE∽OEAより,\(r_3\) が与えられたときに,まず \(r_1\) を求め,最終的に \(r_2\) を求める。

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

using SymPy
@syms R::positive, r1::positive,
     r2::positive, x2::positive,
     r3::positive, x3::positive, y3::positive,
     x0::positive
R = 2r1
eq1 = dist2(0, -r3, x3, y3, 0, r1, r1 - r3)
eq3 = x2^2 + r2^2 - (R - r2)^2 |> expand
eq4 = x3^2 + y3^2 - (R - r3)^2 |> expand
eq5 = x3^2 + (y3 - r1)^2 - (r1 + r3)^2 |> expand;

1. 小円と中円の関係

eq6 = r3*(x2 - x0)/x0 - r2  # = r3/x0 - r2/(x2 - x0)
eq6 |> println

   -r2 + r3*(-x0 + x2)/x0

2. 小円と大円の関係

eq7 = r3/x0 - x0/r1;
eq7 |> println

   r3/x0 - x0/r1

eq7 を解いて \(x_0\) を求める。

ans_x0 = solve(eq7, x0)[1]
ans_x0 |> println

   sqrt(r1)*sqrt(r3)

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

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

   2*sqrt(r1)*sqrt(r1 - r2)

3. 中円の半径を求める

eq = eq6(x0 => ans_x0, x2 => ans_x2)
eq |> println

   -r2 + sqrt(r3)*(-sqrt(r1)*sqrt(r3) + 2*sqrt(r1)*sqrt(r1 - r2))/sqrt(r1)

ans_r2 = solve(eq, r2)[1]
ans_r2 |> println

   2*sqrt(r3)*sqrt(r1 + 2*r3) - 3*r3

eq4, eq5 から \(x_3,\ y_3\) を求め,eq1 に代入し,eq1 を解いて \(r_1\) を求め, 上の式に代入する。

(ans_x3, ans_y3) = solve([eq4, eq5], (x3, y3))[1];
ans_x3 |> println
ans_y3 |> println

   2*sqrt(2)*sqrt(r3)*sqrt(r1 - r3)
   2*r1 - 3*r3

eq1 = eq1(x3 => ans_x3, y3 => ans_y3) |> simplify
eq1 |> println

   -4*r1^4 + 16*r1^3*r3 + 8*r1^2*r3^2 - 16*r1*r3^3 - 4*r3^4

ans_r1 = solve(eq1, r1)[2]
ans_r1 |> println

   r3*(2 + sqrt(5))

r2 = ans_r2(r1 => ans_r1) |> simplify
r2 |> println

   r3*(-3 + 2*sqrt(sqrt(5) + 4))

中円の半径 \(r_2\) は,小円の半径 \(r_3\) の \(2\sqrt{\sqrt{5} + 4} - 3\) 倍である。
小円の直径が 1 寸のとき 中円の直径は 1.99442408191367 寸である。

2r2(r3 => 0.5).evalf() |> println

   1.99442408191367

術では,\(\sqrt{\sqrt{80} + 16} - 3\) 倍となっている。

(sqrt(sqrt(Sym(80)) + 16) - 3) |> println

   -3 + sqrt(4*sqrt(5) + 16)

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

\(r_3 = 0.5;\ r_1 = 2.11803;\ R = 4.23607;\ r_2 = 0.997212\)
\(x_2 = 3.08152;\ x_3 = 2.54404;\ y_3 = 2.73607;\ x_0 = 1.02909\)
\(y_{00} = 1.30902;\ x_{01} = 3.20585;\ y_{01} = 2.76889\)

#=
r1 = r3*(2 + √5)
R = 2r1
x3 = 2sqrt(2r3*(r1 - r3))
y3 = 2r1 - 3r3
r2 = r3*(2sqrt(√5+ 4) - 3)
x2 = 2*sqrt(r1)*sqrt(r1 - r2)
x0 = sqrt(r1)*sqrt(r3)
=#

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

function draw(more=false)
   pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   r3 = 0.5
   r1 = r3*(2 + √5)
   R = 2r1
   x3 = 2sqrt(2r3*(r1 - r3))
   y3 = 2r1 - 3r3
   r2 = r3*(2sqrt(√5+ 4) - 3)
   x2 = 2sqrt(r1*(r1 - r2))
   x0 = sqrt(r1*r3)
   tanθ = (r3 + y3)/x3
   y00 = x0*tanθ
   x01 = (tanθ*y00 + sqrt(4*r1^2*tanθ^2 + 4*r1^2 - y00^2))/(tanθ^2 + 1)
   y01 = (tanθ*sqrt(4*r1^2*tanθ^2 + 4*r1^2 - y00^2) - y00)/(tanθ^2 + 1)
   @printf("小円の直径が %g のとき,中円の直径は %g である。\n", 2r3, 2r2)
   @printf("r3 = %g;  r1 = %g;  R = %g;  r2 = %g;  x2 = %g;  x3 = %g;  y3 = %g;  x0 = %g\n", r3, r1, R, r2, x2, x3, y3, x0)
   @printf("y00 = %g;  x01 = %g;  y01 = %g\n", y00, x01, y01)
   plot()
   circle(0, 0, R, :orange, beginangle=0, endangle=180)
   segment(-R, 0, R, 0, :orange)
   circle(0, r1, r1)
   circle2(x2, r2, r2, :green)
   circle2(x3, y3, r3, :blue)
   circle(0, -r3, r3, :blue)
   segment(x01, y01, 0, -y00)
   segment(-x01, y01, 0, -y00)
   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(x3, y3, "小円:r3,(x3,y3) ", :blue, :right, :vcenter)
       point(0, -r3, " C  小円:r3,(0,-r3)", :blue, :left, delta=-delta)
       point(x0, 0, "E (x0,0)", :black, :left, delta=-delta)
       point(x2, 0, "D (x2,0)", :black, :left, delta=-delta)
       point(0, r1, "大円:r1,(0,r1)\nA", :red, :right, :bottom, delta=delta)
       point(x2, r2, "中円:r2\n(x2,r2)\nB", :green, :center, :bottom, delta=delta)
       point(0, 0, "O ", :black, :right, :bottom, delta=delta)
       point(0, -y00, " -y00", :black, :left, :vcenter)
       point(x01, y01, " (x01,y01)", :black, :left, :vcenter)
       segment(x2, r2, 0, -r3, :magenta)
       segment(0, r1, 0, -r3, :magenta)
       segment(0, r1, x0, 0, :magenta)
       segment(x2, r2, x2, 0, :magenta)
   end
end;


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




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

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