算額(その71)
福島県田村郡三春町山中 田村大元神社 明治34年(1901)5月
http://www.wasan.jp/fukusima/tamuradaigen.html
矩形内に対角線に接して甲円 2 個,乙円 1 個がある。甲円の径が 3 寸のとき,乙円の径はいかほどか。
図のように記号を定め,方程式を解く。
using SymPy
@syms r1::positive, r2::positive;
算額では矩形を「直」と書いているが,これは,鉤 = 3k,股 = 4k,弦 = 5k の直角三角形を 2 つ組み合わせたものである。
大円の半径 r1 は「鉤股弦 ABC と内接円の定理」により,r1*(3 + 4 - 5)/2 = 3 を解けばよい。
r1 = solve(r1*(3 + 4 - 5)//2 - 3)[1]
3
小円の半径 r2 は,大円と小円が外接することを用いて (x1//2-r1)^2 + (y1-r2-r1)^2 = (r1 + r2)^2 を解けばよい。(x1, y1) は (12, 9) である。
(x1, y1) = (12, 9)
r2 = solve((x1//2-r1)^2 + (y1-r2-r1)^2 - (r1 + r2)^2)[1]
2
using Plots
function circle(ox, oy, r, color=:red; beginangle=0, endangle=360)
θ = beginangle:0.1:endangle
x = r.*cosd.(θ)
y = r.*sind.(θ)
plot!(ox .+ x, oy .+ y, color=color, linewidth=0.5)
end;
function point(x, y, string="", color=:green, position=:left, vertical=:top; mark=true)
mark && scatter!([x], [y], color=color, markerstrokewidth=0)
annotate!(x, y, text(string, 10, position, color, vertical))
end;
function segment(x1, y1, x2, y2, color=:black; linestyle=:solid, linewidth=0.5)
plot!([x1, x2], [y1, y2], color=color, linestyle=linestyle, linewidth=linewidth)
end;
function draw(more=false)
pyplot(size=(500, 500), grid=false, aspectratio=1, label="")#, fontfamily="IPAMincho")
# 矩形の左下角を原点,右上角の座標 (x1, y1)として図を描く
(x1, y1) = (12, 9)
(r1, r2) = (3, 2)
plot([0, x1, x1, 0, 0], [0, 0, y1, y1, 0], color=:black, showaxis=false)
segment(0, 0, x1, y1)
segment(0, y1, x1, 0)
circle(r1, r1, r1)
circle(x1-r1, r1, r1)
circle(x1/2, y1-r2, r2, :blue)
if more
println("r1 = $r1; r2 = $r2")
plot!(xlims=(-0.5, x1+0.5), ylims=(-0.5, y1+0.5), showaxis=true)
point(0, y1, "A ", :black, :right)
point(0, 0, "B ", :black, :right)
point(x1, 0, "C ", :black, :right)
point(r1, r1, "(r1, r1)", :red, :center)
point(x1/2, y1-r2, "(x1/2, y1-r2)", :blue, :center)
end
end;
r1 = 3; r2 = 2