算額(その1158)
十七 大里郡岡部村岡 稲荷社 文化13年(1816)
埼玉県立図書館:埼玉県史料集 第二集『埼玉の算額』,昭和44年,誠美堂印刷所,埼玉県与野市.
キーワード:円10個,外円,直角三角形
外円の中に直角三角形,甲円,乙円,丙円を 1 個ずつ,丁円,戊円,己円を 2 個ずつ容れる。丁円,戊円の直径がそれぞれ 4 寸 3 寸のとき,己円の直径はいかほどか。
算額(その589)を一段階複雑にしたものである。
直角三角形の斜辺は外円の直径である(中心を通る)。
外円の半径と中心座標を R, (0, 0)
線分 AB, CA, CB の長さを AB, CA, CB とする。
甲円の半径と中心座標を r1, (x1, y1)
乙円の半径と中心座標を r2, (0, r2 - R)
丙円の半径と中心座標を r3, (r3 - R, 0)
丁円の半径と中心座標を r4, (x41, y41), (x42, y42)
戊円の半径と中心座標を r5, (x5, -OB - r5)
己円の半径と中心座標を r6, (-OA/2 - r6, y6)
とおき,以下の連立方程式を解く。
まず eq1, eq2, eq3, eq4 を解いて,r6, R, CA, CB を求める。
eq1, eq2, eq3 は「算法助術」の公式29 である。
include("julia-source.txt")
using SymPy
@syms AB::positive, CA::positive, CB::positive,
R::positive, r1::positive, r2::positive, r3::positive,
r4::positive, r5::positive, r6::positive
AB = 2R
eq1 = AB^2 - 16R*r4
eq2 = CA^2 - 16R*r5
eq3 = CB^2 - 16R*r6
eq4 = CA^2 + CB^2 - AB^2
(ans_r6, ans_R, ans_CA, ans_CB) = solve([eq1, eq2, eq3, eq4], (r6, R, CA, CB))[1]
(r4 - r5, 4*r4, 8*sqrt(r4)*sqrt(r5), 8*sqrt(r4)*sqrt(r4 - r5))
己円の半径 r6 は,丁円の半径 r4 から戊円の半径 r5 を引いたものである。
丁円,戊円の直径がそれぞれ 4 寸 3 寸のとき,己円の直径は 1 寸である。
算額の答えはここまででよいが,図を描くために残りのパラメータをすべて求める。
---
乙円の半径はすぐに求まり,次いで戊円の中心座標 x5 も求まる。
@syms x5
ans_r2 = (ans_R - ans_CB/2)/2
eq5 = x5^2 + (r2 - r5)^2 - (r2 + r5)^2
ans_x5 = solve(eq5, x5)[2]
ans_x5 |> println
2*sqrt(r2)*sqrt(r5)
同様にして,丙円の半径,己円の中心座標 y6 も求まる。
@syms y6
r3 = (ans_R - ans_CA/2)/2
eq6 = (r3 - r6)^2 + y6^2 - (r3 + r6)^2
ans_y6 = solve(eq6, y6)[2]
ans_y6 |> println
2*sqrt(2)*sqrt(r6)*sqrt(-sqrt(r4)*sqrt(r5) + r4)
甲円と丁円のパラメータについては,直角三角形の斜辺を水平にした場合について求め,実際の角度だけ座標を回転させて図を描く。
@syms x4
r1 = ans_R/2
eq7 = x4^2 + r4^2 - (ans_R - r4)^2
ans_x4 = solve(eq7, x4)[2]
ans_x4 |> println
2*sqrt(2)*r4
function draw(r4, r5, more=false)
pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
(r6, R, CA, CB) = (r4 - r5, 4*r4, 8*sqrt(r4)*sqrt(r5), 8*sqrt(r4)*sqrt(r4 - r5))
AB = sqrt(CA^2 + CB^2)
r2 = (R - CB/2)/2
x5 = 2*sqrt(r2)*sqrt(r5)
r3 = (R - CA/2)/2
y6 = 2*sqrt(2)*sqrt(r6)*sqrt(-sqrt(r4)*sqrt(r5) + r4)
r1 = R/2
(x1, y1) = transform(0, r1, deg=-atand(CB/CA))
x4 = 2√2r4
(x41, y41) = transform(x4, r4, deg=-atand(CB/CA))
(x42, y42) = transform(-x4, r4, deg=-atand(CB/CA))
@printf("丁円,戊円の直径が %g, %g のとき,己円の直径は %g である。\n", 2r4, 2r5, 2r6)
@printf("r4 = %g; r5 = %g; r6 = %g; R = %g; CA = %g; CB = %g\n", r4, r5, r6, R, CA, CB)
plot([-CA/2, CA/2, -CA/2, -CA/2], [-CB/2, -CB/2, CB/2, -CB/2], color=:green, lw=0.5)
circle(0, 0, R, :orange)
circle(0, r2 - R, r2, :blue, lw=2)
circle2(x5, -CB/2 - r5, r5, :blue)
circle(r3 - R, 0, r3, :magenta, lw=2)
circle22(-CA/2 - r6, y6, r6, :magenta)
circle(x1, y1, r1, lw=2)
circle(x41, y41, r4)
circle(x42, y42, r4)
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, R, "R", :orange, :center, :bottom, delta=delta/2)
point(R, 0, " R", :orange, :left, :bottom, delta=delta/2)
point(x1, y1, "甲円:r1,(x1,y1)", :red, :center, delta=-delta/2)
point(x41, y41, "丁円:r4\n(x41,y41)", :red, :center, delta=-delta/2)
point(x42, y42, "丁円:r4\n(x42,y42)", :red, :center, delta=-delta/2)
point(0, r2 - R, "乙円:r2\n(0,r2-R)", :blue, :center, :bottom, delta=delta/2)
point(x5, -CB/2 - r5, "戊円:r5\n(x5,-CB/2-r5)", :blue, :center, :bottom, delta=delta/2)
point(r3 - R, 0, " 丙円:r3,(r3-R,0)", :magenta, :left, :vcenter)
point(-CA/2 - r6, y6, " 己円:r6,(-CA/2-r6,y6)", :magenta, :left, :vcenter)
point(-CA/2, -CB/2, "C ", :green, :right, :vcenter)
point(CA/2, -CB/2, " A", :green, :left, :vcenter)
point(-CA/2, CB/2, "B ", :green, :right, :vcenter)
end
end;