算額(その766)
山形県七日町 長源寺観音堂 大正4年(1915)
http://www.wasan.jp/yamagata/chogenji.html
3 個の甲円が交わり,上の甲円には上の甲円に内接し下の2個の甲円に外接する正方形を入れ,下の甲円には上の甲円に外接し,下の甲円に内接する乙円と,乙円と上の甲円に外接し下の甲円に内接する丙円を入れる。それぞれの大きさを求めよ。
甲円の半径と中心座標を r1, (0, r1), (r1, 0)
乙円の半径と中心座標を r2, (x2, y2)
丙円の半径と中心座標を r3, (x3, y3)
正方形の一辺の長さを a
として,以下の連立方程式を r1 を未知数のままとして解く。
一度に解いてもよいが,乙円・丙円をいれるのと正方形をいれるのは独立なので,まずは乙円と丙円を甲円に入れる。
include("julia-source.txt");
using SymPy
@syms r1::positive, r2::positive, x2::positive, y2::negative,
r3::positive, x3::positive, y3::positive
y2 = r1 - x2
eq1 = (x2 - r1)^2 + y2^2 - (r1 - r2)^2
eq2 = x2^2 + (r1 - y2)^2 - (r1 + r2)^2
eq3 = (x3 - r1)^2 + y3^2 - (r1 - r3)^2
eq4 = (x2 - x3)^2 + (y3 - y2)^2 - (r2 + r3)^2
eq5 = x3^2 + (r1 - y3)^2 - (r1 + r3)^2
solve([eq1, eq2, eq3, eq4, eq5], (r2, x2, r3, x3, y3))
1-element Vector{NTuple{5, Sym{PyCall.PyObject}}}:
(sqrt(2)*r1/2, r1*(1 + sqrt(2))/2, sqrt(2)*r1/6, r1*(1 + sqrt(2))/2, r1*(sqrt(2)/6 + 1/2))
右下の甲円の円周上に (sx, sy) を取り,sx = a/2 かつ (sx, sy + a ) が上の甲円の円周上にあるような sx, sy を求める。
@syms a::positive, sx::positive, sy::positive
a = 2sx
eq6 = (sx - r1)^2 + sy^2 - r1^2
eq7 = sx^2 + (sy + a - r1)^2 - r1^2
solve([eq6, eq7], (sx, sy))
1-element Vector{Tuple{Sym{PyCall.PyObject}, Sym{PyCall.PyObject}}}:
(r1/2, sqrt(3)*r1/2)
まとめると,乙円,丙円の直径はそれぞれ甲円の直径の √2/2,√2/6 倍であり,正方形の一辺の長さは甲円の半径に等しい。
その他のパラメータは以下のとおり。
甲円の直径 = 1; 乙円の直径 = 0.707107; 丙円の直径 = 0.235702; 正方形の一辺の長さ = 0.5
r1 = 0.5; a = 0.5; r2 = 0.353553; x2 = 0.603553; y2 = -0.103553; r3 = 0.117851; x3 = 0.603553; y3 = 0.367851
function draw(more=false)
pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
r1 = 1//2
(r2, x2, r3, x3, y3) = (sqrt(2)/4, 1/4 + sqrt(2)/4, sqrt(2)/12, 1/4 + sqrt(2)/4, sqrt(2)/12 + 1/4)
y2 = r1 - x2
(sx, sy) = (1/4, sqrt(3)/4)
a = 2sx
@printf("甲円の直径 = %g; 乙円の直径 = %g; 丙円の直径 = %g; 正方形の一辺の長さ = %g\n", 2r1, 2r2, 2r3, a)
@printf("r1 = %g; a = %g; r2 = %g; x2 = %g; y2 = %g; r3 = %g; x3 = %g; y3 = %g\n", r1, a, r2, x2, y2, r3, x3, y3)
plot([sx, sx, -sx, -sx, sx], [sy, sy + a, sy + a, sy, sy], color=:green, lw=0.5)
circle(0, r1, r1, :blue)
circle2(r1, 0, r1, :blue)
circle2(x2, y2, r2)
circle2(x3, y3, 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, r1, "甲円:r1,(0,r1)", :blue, :center, :bottom, delta=delta)
point(r1, 0, "甲円:r1,(r1,0)", :blue, :center, :bottom, delta=delta)
point(x2, y2, "乙円:r2,(x2,y2)", :red, :center, :bottom, delta=delta)
point(x3, y3, " 丙円:r3,(x3,y3)", :black, :center, delta=-delta/2)
point(sx, sy, "(sx,sy)", :green, :left, delta=-delta/2)
point(sx, sy + a, " (sx,sy+a)", :green, :left, :vcenter)
end
end;