七十四 群馬県甘楽郡妙義町菅原 菅原神社 嘉永4年(1851)
群馬県和算研究会:群馬の算額,上武印刷株式会社,高崎市,1987年3月31日.
キーワード:円11個
#Julia #SymPy #算額 #和算 #数学
5 個の大円が交差する隙間に 6 個の小円を容れる。大円の直径が 5 寸のとき,小円の直径はいかほどか。

大円の半径と中心座標を \(r_1, (0, r_1 + r_2)\)
小円の半径と中心座標を \(r_2, (0, 0), (x_2, y_2); y_2 = x_2\text{tand}(54)\)
とおき,以下の連立方程式を解く。
一度に解くと \(r_2\) を表す式がとてつもなく複雑になるので,まず eq2 から \(x_2\) を求め,その解を eq1 に代入して \(r_2\) を求める。
include("julia-source.txt"); # julia-source.txt ソース
using SymPy
@syms r1::positive, r2::positive, x2::positive, y2::positive;
y2 = x2*tand(Sym(54))
eq1 = x2^2 + (r1 + r2 - y2)^2 - (r1 - r2)^2
eq2 = x2 - (r1 + r2)*cosd(Sym(18))/2;
ans_x2 = solve(eq2, x2)[1];
eq11 = eq1(x2 => ans_x2);
@syms d
ans_r2 = solve(eq11, r2)[1]
ans_r2 = solve(eq11, r2)[1]/r1 |> x -> apart(x, d)*r1 |> simplify
ans_r2 |> println
(ans_r2.evalf()) |> println
ans_r2(r1 => 5/2).evalf() |> println
r1*(-2*sqrt(10*sqrt(5) + 50) - 4*sqrt(5) + 11 + 4*sqrt(2*sqrt(5) + 10))
0.259616183682498*r1
0.649040459206249
小円の半径 \(r_2\) は,大円の半径 \(r_1\) の \(-2 \sqrt{10 \sqrt{5} + 50} - 4 \sqrt{5} + 11 + 4 \sqrt{2 \sqrt{5} + 10} = 0.259616183682498\) 倍である。
大円の直径が 5 寸のとき,小円の直径は 1.29808091841249 寸である。
ans_x2 = ans_x2(r2 => ans_r2) |> simplify
ans_x2 |> println
ans_x2.evalf() |> println
ans_x2(r1 => 5/2).evalf() |> println
r1*(-sqrt(10*sqrt(5) + 50) - 3*sqrt(5) + 5 + 3*sqrt(2*sqrt(5) + 10))/2
0.598983089761036*r1
1.49745772440259
大円の直径が 5 寸のとき,小円の半径の中心座標は (3.743644311006475 寸, 5.152684346344076 寸) である。
1.49745772440259*5/2, 1.49745772440259*5/2*tand(54)
(3.743644311006475, 5.152684346344076)
描画関数プログラムのソースを見る
function draw(r1, more=false)
pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
r2 = r1*(11 + 4*sqrt(2√5 + 10) - 2sqrt(10√5 + 50) - 4√5)
x2 = r1*( 5 + 3*sqrt(2√5 + 10) - sqrt(10√5 + 50) - 3√5)/2
y2 = x2*tand(54)
@printf("大円の直径が %g のとき,小円の直径は %g である。\n", 2r1, 2r2)
plot()
rotate(0, r1 + r2, r1, angle=72)
rotate(x2, y2, r2, :blue, angle=72)
circle(0, 0, r2, :blue)
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(x2, y2, " 小円:r2,(x1,y2)", :blue, :left, :vcenter)
point(0, r1 + r2, "大円:r1,(0,r1+r2)", :red, :center, :bottom, delta=delta/2)
end
end;
draw(5/2, true)
以下のアイコンをクリックして応援してください