算額(その1272)
百三十七 群馬県藤岡市藤岡 金光寺 明治21年(1888)
群馬県和算研究会:群馬の算額,上武印刷株式会社,高崎市,1987年3月31日.
キーワード:円4個,円弧2個
線対称の円弧 2 本の間に赤円,青円,黄円が挟まっている。3 個の円の直径がそれぞれ 0.57 寸,0.6 寸,0.66 寸のとき,円弧の直径はいかほどか。
算額に描かれているのは以下の図のようである。「問」に「剣形」と書かれており,弧背(円弧)は円弧らしく見えないが紛れもなく円弧である。
与えられた条件のもとでの図は,以下の図であるが,円弧の半径は相当大きく,わかりやすく図に収めることができない。
剣形だのなんのと言うが,要するに,3 個の円がそれぞれ円弧に外接しているという状況なので,3 個の円の直径がそれぞれ 0.5, 0.6, 1.2 のときの図を以下に示す。
3 個の円の中心を y 軸上におき,黄円が x 軸に接するように座標を定義する。
弧がその一部である円の半径と中心座標を R, (x0, y0)
赤円の半径と中心座標を r1, (0, 2r3 + 2r2 + r1)
青円の半径と中心座標を r2, (0, 2r3 + r2)
黄円の半径と中心座標を r3, (0, r3)
とおき,以下の連立方程式を解く。
include("julia-source.txt");
using SymPy
@syms R::positive, x0::positive, y0::positive,
r1::positive, r2::positive, r3::positive;
eq1 = x0^2 + (2r3 + 2r2 + r1 - y0)^2 - (R + r1)^2
eq2 = x0^2 + (2r3 + r2 - y0)^2 - (R + r2)^2
eq3 = x0^2 + (r3 - y0)^2 - (R + r3)^2
res = solve([eq1, eq2, eq3], (R, x0, y0))[2] # 2 of 2
(r2*(r1 + r2)*(r2 + r3)/(r1*r3 - r2^2), 2*sqrt(r1)*r2*sqrt(r3)*sqrt(r1 + r2)*sqrt(r2 + r3)/(r1*r3 - r2^2), -(r2 + r3)*(r1*r2 - 2*r1*r3 + r2^2)/(r1*r3 - r2^2))
円弧の半径 R は,3 個の円の半径 r1, r2, r3 の関数である。
3 個の円の直径がそれぞれ 0.57 寸,0.6 寸,0.66 寸のとき,円弧の直径は 27.3 * 2 = 54.6 寸 である。
r1 = 0.57/2
r2 = 0.6/2
r3 = 0.66/2
r2*(r1 + r2)*(r2 + r3)/(r1*r3 - r2^2)
27.30000000000001
すべてのパラメータは以下のとおりである。
r1 = 0.285; r2 = 0.3; r3 = 0.33; R = 27.3; x0 = 27.5819; y0 = 1.96
function draw(r1, r2, r3, more)
pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
(R, x0, y0) = (r2*(r1 + r2)*(r2 + r3)/(r1*r3 - r2^2), 2*sqrt(r1)*r2*sqrt(r3)*sqrt(r1 + r2)*sqrt(r2 + r3)/(r1*r3 - r2^2), -(r2 + r3)*(r1*r2 - 2*r1*r3 + r2^2)/(r1*r3 - r2^2))
@printf("赤円,青円,黄円の直径がそれぞれ %g, %g, %g のとき,円弧の直径は %g である。\n", 2r1, 2r2, 2r3, 2R)
@printf("r1 = %g; r2 = %g; r3 = %g; R = %g; x0 = %g; y0 = %g\n", r1, r2, r3, R, x0, y0)
sum_r = 2(r1 + r2 + r3)
θ = atand(sum_r + y0, x0 - 2r3)
plot()
circle(x0, y0, R, :black)#, beginangle=180 - θ, endangle=180 + θ, n=1000)
circle(-x0, y0, R, :black)#, beginangle=-θ, endangle=θ, n=1000)
circle(0, 2r3 + 2r2 + r1, r1)
circle(0, 2r3 + r2, r2, :blue)
circle(0, r3, r3, :orange)
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, 2r3 + 2r2 + r1, "赤円:r1,(0,2r3+2r2+r1)", :red, :left, :vcenter, deltax=delta/2)
point(0, 2r3 + r2, "青円:r2,(0,2r3+r2)", :blue, :left, :vcenter, deltax=delta/2)
point(0, r3, "黄円:r3,(0,r3)", :orange, :left, :vcenter, deltax=delta/2)
point(x0, y0, "(x0,y0)")
plot!(xlims=(-2r3, x0 + 3), ylims=(-0.2sum_r, 2.3sum_r))
end
end;
draw(0.57/2, 0.6/2, 0.66/2, true)