三四 武蔵国埼玉郡下忍村遍照院境内 金毘羅社(神楽堂) 天保11年(1840)
埼玉県立図書館:埼玉県史料集 第二集『埼玉の算額』,昭和44年,誠美堂印刷所,埼玉県与野市.
キーワード:円4個,楕円,長方形
#Julia #SymPy #算額 #和算 #数学
長方形の中に楕円,甲円 2 個,乙円 2 個を容れる。甲円と乙円は楕円の周上の一点で接している。乙円の直径が 1 寸のとき,楕円の短径は何寸か。

甲円と乙円の中心の垂直距離(\(y\) 座標値の差)を \(k\) とする。
楕円の長半径,短半径,中心座標を \(a, b, (0, k + r_1); a = 2r_1\)
甲円の半径と中心座標を \(r_1, (r_1, r_1)\)
乙円の半径と中心座標を \(r_2, (r_2, r_1 + k)\)
include("julia-source.txt"); # julia-source.txt ソース
using SymPy
@syms a::positive, b::positive, r2::positive, r1::positive, h::positive, k::positive
a = 2r1
eq1 = 4r2^2 - 4(a^2 - b^2)*(b^2 - r2^2)/b^2 # 算法助術-公式84
eq2 = k^2 - (r2 + r1)^2*(a^2*r2^2 - b^4)/( (a^2 - b^2)*r2^2) # 算法助術-公式99
eq3 = (a - r2 - r1)^2 + k^2 - (r2 + r1)^2; # 甲円と乙円が接する;
res = solve([eq1, eq2, eq3], (b, r1, k))[1]
(r2*sqrt(4 - 2*sqrt(2)), sqrt(2)*r2, 2*2^(1/4)*r2)
楕円の短半径 \(b\) は,乙円の半径 \(r_2\) の \(\sqrt{4 - 2\sqrt{2}}\) 倍である。
乙円の直径が 1 寸のとき,楕円の短径は \(\sqrt{4 - 2\sqrt{2}} ≒ 1.082(1.0823922002923938) \)寸である。
ちなみに,甲円の半径 \(r_1\) は,乙円の半径 \(r_2\) の \(\sqrt{2}\) 倍である。
sqrt(4 - 2√2)
1.0823922002923938
描画関数プログラムのソースを見る
function draw(r2, more)
pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
(b, r1, k) = (r2*sqrt(4 - 2√2), √2r2, 2*2^(1/4)*r2)
a = 2r1
@printf("乙円の直径が %g のとき,楕円の短径は %g,甲円の直径は %g である。\n", 2r2, 2b, 2r1)
plot([-a, a, a, -a, -a], [0, 0, b + k + r1, b + k + r1, 0], color=:green, lw=0.5)
ellipse(0, k + r1, a, b, color=:red)
circle2(r2, r1 + k, r2, :blue)
circle2(r1, r1, r1, :magenta)
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(r1, r1, "甲円:r1,(r1,r1)", :magenta, :center, delta=-delta)
point(r2, r1 + k, "乙円:r2,(r2,r1+k)", :blue, :center, :bottom, delta=delta)
point(-r1, r1, "(-r1,r1)", :magenta, :center, delta=-delta)
point(-r2, r1 + k, "", :blue, :center, delta=-delta)
dimension_line(-r1, r1, -r1, r1 + k, "k ", :orange, :right, :vcenter, length=0.15r1)
segment(-a, r1 + k, a, r1 + k, :gray60)
segment(-r1, r1, r1, r1, :gray60)
point(a, r1 + k, " (a,r1+k)", :red, :left, :vcenter)
point(0, r1 + k + b, " (0,r1+k+b)", :red, :center, :bottom, delta=delta)
# xlims!(-a - 3delta, a + 14delta)
# ylims!(-2delta, r1 + k + b + delta)
end
end;
draw(1/2, true)
以下のアイコンをクリックして応援してください