算額(その746)
七七 大里郡大里村相上 吉見神社 明治9年(1876)
埼玉県立図書館:埼玉県史料集 第二集『埼玉の算額』,昭和44年,誠美堂印刷所,埼玉県与野市.
埼玉県北本市本宿 天神社 明治24年(1891)
山口正義:やまぶき2,第41号
https://yamabukiwasan.sakura.ne.jp/ymbk41.pdf
キーワード:円5個,外円
外円の中に大円,小円が 1 個ずつ,中円が 2 個入っている。外円,大円,小円の直径がそれぞれ 4 寸,2 寸 4 分,9 分のとき,中円の直径はいかほどか。
外円の半径と中心座標を R, (0, 0)
大円の半径と中心座標を r1, (0, r1 - R)
中円の半径と中心座標を r2, (x2, y2)
小円の半径と中心座標を r3, (0, R - r3)
とおき,以下の方程式を解く。
include("julia-source.txt");
using SymPy
@syms R::positive, r1::positive, r2::positive,
x2::positive, y2::positive, r3::positive
eq1 = x2^2 + y2^2 - (R - r2)^2
eq2 = x2^2 + (y2 - r1 + R)^2 - (r1 + r2)^2
eq3 = x2^2 + (R - r3 - y2)^2 - (r2 + r3)^2
res = solve([eq1, eq2, eq3], (r2, x2, y2))
2-element Vector{Tuple{Sym{PyCall.PyObject}, Sym{PyCall.PyObject}, Sym{PyCall.PyObject}}}:
(-R*(-R + r1)*(-R + r3)/(-R^2 + r1*r3), -2*R*sqrt(r1)*sqrt(r3)*sqrt((-R + r1)*(-R + r3))/(-R^2 + r1*r3), -R^2*(r1 - r3)/(-R^2 + r1*r3))
(-R*(-R + r1)*(-R + r3)/(-R^2 + r1*r3), 2*R*sqrt(r1)*sqrt(r3)*sqrt((-R + r1)*(-R + r3))/(-R^2 + r1*r3), -R^2*(r1 - r3)/(-R^2 + r1*r3))
2 組の解が得られる。x2 の符号が違うだけで,本質的にどちらも適解であるが,符号の点で最初のものを採用する。
中円の半径は,R*(R - r1)*(R - r3)/(R^2 - r1*r3) となる。
res[1][1] |> simplify |> println
R*(R - r1)*(R - r3)/(R^2 - r1*r3)
外円,大円,小円の直径がそれぞれ 4 寸,2 寸 4 分,9 分のとき,中円の半径は 0.7167630057803468 である。直径は 1.4335260115606936 である。
(R, r1, r3) = (40, 24, 9) ./ 20
r2 = R*(R - r1)*(R - r3)/(R^2 - r1*r3)
(r2, 2r2)
(0.7167630057803469, 1.4335260115606938)
「術」では「大小円径を乗じ,外円径の二乗から引いたもので,外大円径の差と外小円径の差と外円径を乗じたものを割る」と得られた式と同じことを書いているのだが,どこかで計算違いをしたのか「答」では 1 寸 5 分となっている。
その他のパラメータは以下のとおり。
中円の直径 = 1.43353; R = 2; r1 = 1.2; r3 = 0.45; r2 = 0.716763; x2 = 0.946001; y2 = 0.867052
function draw(more=false)
pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
(R, r1, r3) = (40, 24, 9) .// 20
(r2, x2, y2) = (-R*(-R + r1)*(-R + r3)/(-R^2 + r1*r3), -2*R*sqrt(r1)*sqrt(r3)*sqrt((-R + r1)*(-R + r3))/(-R^2 + r1*r3), -R^2*(r1 - r3)/(-R^2 + r1*r3))
@printf("中円の直径 = %g; R = %g; r1 = %g; r3 = %g; r2 = %g; x2 = %g; y2 = %g\n", 2r2, R, r1, r3, r2, x2, y2)
plot()
circle(0, 0, R, :magenta)
circle(0, r1 - R, r1, :blue)
circle2(x2, y2, r2)
circle(0, R - r3, r3, :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(0, r1 - R, " 大円:r1,(0,r1-R)", :blue, :center, delta=-delta/2)
point(x2, y2, "中円:r2,(x2,y2)", :red, :center, delta=-delta/2)
point(0, R - r3, "小円:r3\n(0,R-r3)", :green, :center, delta=-delta/2)
point(R, 0, " R", :magenta, :left, :vcenter)
end
end;