算額(その1396)
三四 武蔵国埼玉郡下忍村遍照院境内 金毘羅社(神楽堂) 天保11年(1840)
埼玉県立図書館:埼玉県史料集 第二集『埼玉の算額』,昭和44年,誠美堂印刷所,埼玉県与野市.
キーワード:円2個,半円,楕円,斜線2本
#Julia, #SymPy, #算額, #和算
半円内に 2 本の斜線を引き,隙間に等円 2 個と楕円 1 個を容れる。楕円は短径端で半円と接し,長径が最も長いものである。楕円の短軸の長さが 1 寸のとき,等円が最も大きくなるときの等円の直径はいかほどか。
2 斜線の交点座標を (0, y)
半円の半径と中心座標を R, (0, 0)
等円の半径と中心座標を r, (x, y)
楕円の長半径,短半径と中心座標を a, b, (0, R - b)
楕円と等円の接点座標を (x0, y0)
とおく。
算額(その1175)
https://blog.goo.ne.jp/r-de-r/e/a9c6b5f00eaa988e13a37370839e7050
に示したように,等円が最も大きくなるのは 2 斜線の交点座標の y が R/2 のときで,そのとき等円の半径 r は r = y/2 = R/4 である。
以下の連立方程式を解く。
include("julia-source.txt");
# julia-source.txt ソース https://blog.goo.ne.jp/r-de-r/e/ad3a427b84bb416c4f5b73089ae813cf
using SymPy
@syms a, b, R, r, y, x0, y0
R = 4r
a = sqrt(b*R)
eq1 = x0^2/a^2 + (y0 - R + b)^2/b^2 - 1
eq2 = -b^2*x0/(a^2*(y0 - R + b)) - 1//2
eq3 = y0/(R + x0) - 1//2;
res = solve([eq1, eq2, eq3], (r, x0, y0))[1]
(5*b/4, 5*b/3, 10*b/3)
等円の半径 r は,楕円の短半径 b の 5/4 倍である。
楕円の短径が 1 寸のとき,等円の直径は 1.25 寸である。
なお,そのとき半円の直径は 2 寸,楕円の長径は √2 = 1.4142135623730951 寸である。
以下で,図を描くためのパラメータを求める。
等円の中心座標を (cx, cy); cy = y,斜線と半円の交点の x 座標 を x1 として,以下の連立方程式を解く。
@syms cx, x1
(r, x0, y0) = (5*b/4, 5*b/3, 10*b/3)
y = 2r
R = 4r
a = sqrt(b*R)
eq4 = sqrt(R^2 - x1^2)/(x1 + R) - 1//2
eq5 = cx^2 + y^2 - (R - r)^2;
solve([eq4, eq5], (cx, x1))[2] # 1 of 4
(5*sqrt(5)*b/4, 3*b)
function draw(b, more)
pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
(r, x0, y0) = (5b/4, 5b/3, 10b/3)
y = cy = 2r
R = 4r
a = sqrt(b*R)
(cx, x1) = (5√5b/4, 3b)
plot()
circle(0, 0, R, :green, beginangle=0, endangle=180)
ellipse(0, R - b, a, b, color=:red)
segment(-R, 0, x1, sqrt(R^2 - x1^2), :magenta)
segment(R, 0, -x1, sqrt(R^2 - x1^2), :magenta)
circle2(cx, cy, r, :blue)
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(cx, cy, "等円:r,(cx,cy)", :blue, :center, delta=-delta)
point(0, R - b, "楕円:a,b,(0,R-b)", :red, :center, delta=-delta)
point(0, R, "R", :green, :center, :bottom, delta=delta)
point(0, y, "y", :magenta, :center, :bottom, delta=delta)
end
end;
draw(1/2, true)
※コメント投稿者のブログIDはブログ作成者のみに通知されます