算額(その1584)
福島県田村市 安倍文殊菩薩堂 明治10年(1877)
深川英俊,トニー・ロスマン:聖なる数学:算額,p. 103,森北出版株式会社,2010年4月22日.
キーワード:円6個,接線2本
#Julia, #SymPy, #算額, #和算, #数学
大円 2 個が外接しており,上の大円内に中円 2 個が内接している。2 個の中円の共通接線は上の大円の中心を通る。中円と共通接線に接する小円を容れる。また,上の大円の中心を通り,下の大円が内接する外円を描く。小円の直径を 1 としたとき,大円,中円,外円の直径はいかほどか。
外円の半径と中心座標を R, (0, r3 - R); R = 3r3/2
大円の半径と中心座標を r3, (0, r3), 0, -r3)
中円の半径と中心座標を r2, (0, r2), (0, 2r3 - r2)
小円の半径と中心座標を r1, (0, 2r3, - 2r2, -r1)
とおき,以下の連立方程式を解く。
eq2 の中に,"r3/2r3" があるのでわかるように,二本の共通接線のなす角は 60° である。
include("julia-source.txt")
# julia-source.txt ソース https://blog.goo.ne.jp/r-de-r/e/ad3a427b84bb416c4f5b73089ae813cf
using SymPy
@syms R, r1, r2, r3
R = 3r3/2
eq1 = r2/(r3 - r2) - r1/(r3 - 2r2 - r1)
eq2 = r2/(r3 - r2) - r3/2r3
res = solve([eq1, eq2], (r2, r3))[1]
(3*r1, 9*r1)
中円の直径は小円の直径の 3 倍,大円の直径は小円の直径の 9 倍である。
外円の直径は大円の直径の 3/2 倍なので,小円の 27/2 倍である。
小円の直径が 1 寸のとき,外円,大円,中円の直径はそれぞれ 27/2 寸,9 寸,3 寸 である。
function draw(r1, more)
pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
(r2, r3) = (3*r1, 9*r1)
R = 3r3/2
@printf("小円の直径が %g のとき,外円,大円,中円の直径は %g, %g, %g である。\n", 2r1, 2R, 2r3, 2r2)
plot()
circle22(0, r3, r3)
circle(0, 2r3 - r2, r2, :blue)
circle(0, r2, r2, :blue)
circle(0, 2r3 - 2r2 - r1, r1, :green)
circle(0, r3 - R, R, :magenta)
segment(R*cosd(30), r3-R-R*sind(30), -r3*sind(30), r3+r3*cosd(30))
segment(-R*cosd(30), r3-R-R*sind(30), r3*sind(30), r3+r3*cosd(30))
if more
delta = (fontheight = (ylims()[2]- ylims()[1]) / 500 * 10 * 2) /3 # size[2] * fontsize * 2
hline!([0], color=:gray80, lw=0.3)
vline!([0], color=:gray80, lw=0.3)
point(0, -r3, "大円:r3,(0,-r3)", :red, :center, delta=-delta)
point(0, r3, " 大円:r3,(0,r3)", :red, :left, :vcenter)
point(0, 2r3 - r2, " 中円:r2,(0,2r3-r2)", :blue, :left, :vcenter)
point(0, r2, " 中円:r2,(0,r2)", :blue, :left, :vcenter)
point(0, 2r3 - 2r2 - r1, " 小円:r1,(0,2r3-2r2-r1)", :green, :left, :vcenter)
point(0, r3 - R, "外円,R,(0,r3-R)", :magenta, :center, delta=-delta)
point(R*cosd(30), r3-R-R*sind(30))
point(-r3*sind(30), r3+r3*cosd(30))
point(-R*cosd(30), r3-R-R*sind(30))
point(r3*sind(30), r3+r3*cosd(30))
end
end;
draw(1/2, true)