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


算額(その0672)

関孝和: 闕擬抄一百問答術

http://hyonemitsu.web.fc2.com/Ketsugishyotojutsu.pdf

米光丁: 和算への旅

http://hyonemitsu.web.fc2.com/

キーワード:円環
#Julia #SymPy #算額 #和算 #数学


問. 61 大円の内外に中円,小円を 19 個配置する。大円の直径が 1 尺のとき,中円,小円の直径はいかほどか。

プログラム的には外円に内接する小円を求めるのが簡単である。
外円(半径 \(R\),中心座標 \( (0,\ 0)\))に外接する中円の半径,内接する小円の半径をそれぞれ \(r_1,\ r_2\) とする。以下の方程式を解く。

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

using SymPy
@syms θ::positive, R::positive, r1::positive, r2::positive, r3::positive, n::integer

θ = 360/n
eq1 = (R + r1)*sind(θ/2) - r1
eq2 = (R - r2)*sind(θ/2) - r2
solve([eq1, eq2], (r1, r2)) |> println

   Dict{Any, Any}(r2 => R*sin(pi/n)/(sin(pi/n) + 1), r1 => -R*sin(pi/n)/(sin(pi/n) - 1))

\(r_1 = R\sin(\pi/n)/(1 - \sin(\pi/n))\)
\(r_2 = R\sin(\pi/n)/(1 + \sin(\pi/n))\)
である。
外円の直径が = 1 尺 = 10 寸のとき,中円の直径は 1.9702361077126025 寸,小円の直径は 1.413320924331764 寸である。

R = 10/2
n = 19
r1 = R*sin(pi/n)/(1 - sin(pi/n))
r2 = R*sin(pi/n)/(1 + sin(pi/n))
(r1, r2) .* 2 |> println

   (1.9702361077126025, 1.413320924331764)

同じプログラムで,外円の直径が \(R\), 円の数が \(n\) の図形を順次縮小して図を描くことができる(\(maxn=2\) を指定する)。

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

function draw(R =10, n=19, maxn=2, more=false)
   pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   θ = 360/n
   x = cosd.(range(0, 360, n + 1))
   y = sind.(range(0, 360, n + 1))
   r1 = -R*sin(pi/n)/(sin(pi/n) - 1)
   R += 2r1
   plot()
   for j = 1:maxn
       if maxn == 2 || j != 1
           @printf("外円の直径 = %.15g,  外円に内接する円の直径 =%.15g\n", R, r1)
           for i in 1:n
               circle( (R - r1)*x[i], (R - r1)*y[i], r1, :blue)
           end
       end
       maxn == 2 && j == 2 && break
       R -= 2r1
       r1 = R*sin(pi/n)/(sin(pi/n) + 1)
       circle(0, 0, R)
   end
   if more && maxn == 2
       delta = (fontheight = (ylims()[2]- ylims()[1]) / 500 * 10 * 2) /3  # size[2] * fontsize * 2
       #vline!([0], color=:black, lw=0.5)
       #hline!([0], color=:black, lw=0.5)
       point(R, 0, " R", :red, :left, :vcenter)
       point(R + 1.97, 0, " R+r1", :red, :left, :vcenter)
       point(R - 1.41, 0, "R-r2 ", :red, :right, :vcenter)
   end
end;


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




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

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