算額(その1319)
八 武州足立郡桶川宿 不動堂 文化3年(1806)
埼玉県立図書館:埼玉県史料集 第二集『埼玉の算額』,昭和44年,誠美堂印刷所,埼玉県与野市.
キーワード:円8個
#Julia, #SymPy, #算額, #和算
大円 4 個が交わっている隙間に天円 2 個,等円 2 個を容れる。天円の直径が 15 寸のとき,等円の直径はいかほどか。
大円の半径と中心座標を r1, (0, r1/2), (√3r1/2, 0)
天円の半径と中心座標を r2, (0, 3r1/2 - r2)
等円の半径と中心座標を r3, (√3r1/2 + r1 - r3, 0)
とおき,以下の方程式を解く。
まず eq1 を解いて r1 を求め,解を eq2 に代入して解いて r3 を求める。
(連立して解くと SymPy では解を求めることができない)
include("julia-source.txt");
using SymPy
@syms r1::positive, r2::positive, r3::positive;
eq1 = (√Sym(3)*r1/2)^2 + (3r1/2 - r2)^2 - (r1 + r2)^2
eq2 = (√Sym(3)*r1/2 + r1 - r3)^2 + (r1/2)^2 - (r1 + r3)^2;
大円の半径 r1 は,天円の半径 r2 の 5/2 倍である。
天円の直径が 15 寸のとき,大円の直径は 15*5/2 = 57.5 である。
ans_r1 = solve(eq1, r1)[1]
ans_r1 |> println
ans_r1(r2 => 15/2) * 2 |> println
5*r2/2
37.5000000000000
等円の半径 r3 は,天円の半径 r2 の 5(1 + 3√3)/26 倍である。
天円の直径が 15 寸のとき,等円の直径は 15*5(1 + 3√3)/26 = 17.873516603961438 である。
eq12 = eq2(r1 => ans_r1)
ans_r3 = solve(eq12, r3)[1] |> factor
ans_r3 |> println
ans_r3(r2 => 15/2).evalf() * 2 |> println
5*r2*(1 + 3*sqrt(3))/26
17.8735166039614
「術」は以下のようになっており,簡約化すると同じ関係式になる。
@syms 天径, d
子 = √Sym(3) + 1
等円径 = 子/2(子 + 3)*5天径
等円径 |> println
等円径(天径 => 15).evalf() |> println
5*天径*(1 + sqrt(3))/(2*sqrt(3) + 8)
17.8735166039614
apart(等円径, d) |> simplify |> println
5*天径/26 + 15*sqrt(3)*天径/26
function draw(r2, more=false)
pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
r1 = 5r2/2
r3 = 5r2*(1 + 3√3)/26
@printf("天円の直径が %g のとき,等円の直径は %g,大円の直径は %g である。\n", 2r2, 2r3, 2r1)
plot()
circle2(√3r1/2, 0, r1)
circle22(0, r1/2, r1)
circle22(0, 3r1/2 - r2, r2, :green)
circle2(√3r1/2 + r1 - r3, 0, r3, :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(0, r1/2, " r1/2", :red, :left, :bottom, delta=delta/4)
point(√3r1/2, 0, "√3r1/2 ", :red, :right, delta=-delta/2)
point(0, 3r1/2 - r2, "天円:r2\n(0,3r1/2-r2)", :green, :center, delta=delta/2)
point(√3r1/2 + r1 - r3, 0, "等円:r3\n(√3r1/2+r1-r3, 0)", :blue, :center, :bottom, delta=delta/2)
end
end;
draw(15/2, true)
※コメント投稿者のブログIDはブログ作成者のみに通知されます