算額(その872)
大阪府茨木市 井於神社 弘化3年(1846)
http://www.wasan.jp/osaka/iyo.html
大球の中に,小球 3 個と,中球 1 個が入っている。大球と小球の直径がそれぞれ 1 尺 2 寸と 4 寸 8 分のとき,中球の直径を求めよ。
eq1, eq2: y 軸の負の無限大方向から x-z 平面を見ると,小球は大球に内接し,中級と外接している。
eq3: 3 次元空間,x-y-z 軸で考える。z 軸の正の無限大方向から x-y 平面を見ると,小球 3 個は互いに接しており,その中心を結ぶと正三角形になる。
大球の半径と中心座標を r1, (0, 0, 0)
中球の半径と中心座標を r2, (0, 0, r1 - r2)
小球の半径と中心座標を r3, (x3, 0, z3); z3 < 0
とおき,以下の連立方程式を解く。
include("julia-source.txt");
using SymPy
@syms r1::positive, r2::positive, r3::positive, x3::positive, z3::negative
(r1, r3) = (120, 48) .// 20
eq1 = x3^2 + z3^2 - (r1 - r3)^2
eq2 = x3^2 + (r1 - r2 - z3)^2 - (r2 + r3)^2
eq3 = x3√Sym(3)/2 - r3
(r2, x3, z3) = solve([eq1, eq2, eq3], (r2, x3, z3))[1]
(3*sqrt(33)/17 + 39/17, 8*sqrt(3)/5, -2*sqrt(33)/5)
中球の直径は 2(3√33 + 39)/17 = 6.615727992895775 寸である。
2(3√33 + 39)/17
6.615727992895775
算額の「答」は「中球径七寸二分」となっているが,これは中球と小球の 1 個が大球の直径上に並ぶ解(12 尺 = 7.2 + 4.8)で,残りの 2 個の小球が入る余地がない。「術」の記述はない。
function draw(more=false)
pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
(r1, r3) = (120, 48) .// 20
(r2, x3, z3) = (3*sqrt(33)/17 + 39/17, 8*sqrt(3)/5, -2*sqrt(33)/5)
plot()
circle(0, 0, r1, :blue)
circle(0, r1 - r2, r2, :orange)
circle(x3, z3, r3, :brown)
if more
hline!([0], color=:gray80, lw=0.5)
vline!([0], color=:gray80, lw=0.5)
point(0, r1, " r1", :blue, :center, :bottom, delta=delta/2)
point(0, r1 - r2, "中球:r2,(0,0,r1-r2)", :orange, :center, delta=-delta/2)
point(x3, z3, "小球:r3,(x3,0,z3)", :brown, :center, delta=-delta/2)
end
end;
function draw2(more=false)
pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
(r1, r3) = (120, 48) .// 20
(r2, x3, z3) = (3*sqrt(33)/17 + 39/17, 8*sqrt(3)/5, -2*sqrt(33)/5)
plot()
circle(0, 0, r1, :blue)
rotate(x3, 0, r3, :brown)
(x, y) = x3*cosd(120), x3*sind(120)
segment(x, y, x3, 0, :gray90)
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(0, r1, " r1", :blue, :center, :bottom, delta=delta/2)
point(x3, 0, "小球:r3,(x3,0,z3)", :brown, :center, delta=-delta/2)
point(x, y, "", :brown)
end
end;