算額(その1031)
三十一 一関市舞川 観福寺内地蔵堂前額 明治34年(1901)
山村善夫:現存 岩手の算額,昭和52年1月30日,熊谷印刷,盛岡市.
http://www.wasan.jp/yamamura/yamamura.html
2 個の大円が外接し,それぞれの内部に中円と 3 個の小円,更に外部に 2 個の小円を配置する。小円の直径が与えられたときに中円の直径を求めよ。
注:うっかり手を付けると条件不足ではないかと気づく。問をよく読めば「接大小円各五所」と書いてある。最初はそれぞれの大円が小円と 5 箇所の接点で接していると読んでいたのだが,共通接点だとすれば,接点は全体で 5 箇所になる。図では共通接点で接していないように見える端の 2 小円(下記で中心が (x3, y31), (0, y32) の2円)は大円と共通の接点(図の緑色の点)で接しているということだ。
大円の半径と中心座標を r1, (r1, 0)
中円の半径と中心座標を r2, (2r1 - r1, 0)
小円の半径と中心座標を r2, (r3, 0), (x3, y31), (0, y32)
とおき,以下の連立方程式を解く。
include("julia-source.txt");
using SymPy
@syms r1::positive,
r2::positive, r3::positive, x3::positive,
y31::positive, y32::positive
eq1 = (r1 - x3)^2 + y31^2 - (r1 - r3)^2
eq2 = r1^2 + y32^2 - (r1 + r3)^2
eq3 = (2r1 - r2 - x3)^2 + y31^2 - (r2 + r3)^2
eq4 = (x3 - r3)^2 + y31^2 - 4r3^2
eq5 = y31/(r1 - x3) - y32/r1 # 端にある2個の小円と大円が一点で接する
res = solve([eq1, eq2, eq3, eq4, eq5], (r1, r2, x3, y31, y32))[1]
(r3*(2 + sqrt(5)), r3*(2*sqrt(5) + 5)/3, r3*(1 + sqrt(5))/2, r3*(-1 + sqrt(5))*sqrt(2*sqrt(5) + 5)/2, r3*sqrt(2*sqrt(5) + 5))
中円の半径 r2 は 小円の半径 r3 の (2√5 + 5)/3 倍である。
術の「二十個開平方加五個以三個除之乗小円径」は「20 の平方根に5 を加え3で割ったものを小円径に掛ける」であるから,術と一致する。
小円の直径が 1 寸のとき,中円の直径は 3.1573786516665265 寸である。
その他のパラメータは以下のとおりである。
r3 = 0.5; r1 = 2.11803; r2 = 1.57869; x3 = 0.809017; y31 = 0.951057; y32 = 1.53884
(2√5 + 5)/3
3.1573786516665265
function draw(more=false)
pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
r3 = 1/2
(r1, r2, x3, y31, y32) = (r3*(2 + sqrt(5)), r3*(2*sqrt(5) + 5)/3, r3*(1 + sqrt(5))/2, r3*(-1 + sqrt(5))*sqrt(2*sqrt(5) + 5)/2, r3*sqrt(2*sqrt(5) + 5))
@printf("小円の直径が %g のとき,中円の直径は %g である。\n", 2r3, 2r2)
@printf("r3 = %g; r1 = %g; r2 = %g; x3 = %g; y31 = %g; y32 = %g\n", r3, r1, r2, x3, y31, y32)
plot()
circle2(r1, 0, r1, :blue)
circle22(0, y32, r3)
circle4(x3, y31, r3)
circle2(r3, 0, r3)
circle2(2r1 - r2, 0, r2, :green)
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(r1, 0, "大円:r1,(r1,0)", :blue, :center, delta=-delta/2)
point(2r1 - r2, 0, "中円:r2,(2r1-r2,0)", :green, :center, :bottom, delta=delta/2)
point(r3, 0, "小円:r3,(r3,0) ", :black, :right, :vcenter)
point(x3, y31, "小円:r3,(x3,y31)", :black, :left, :bottom, delta=delta/2)
point(0, y32, "小円:r3,(0,y32)", :black, :left, :bottom, delta=delta/2)
point(x3/2, (y32 + y31)/2)
end
end;