算額(その726)
百二十七 群馬県桐生市梅田町 日枝神社 明治12年(1879)
群馬県和算研究会:群馬の算額,上武印刷株式会社,高崎市,1987年3月31日.
群馬県桐生市梅田町 日枝神社 明治12年
https://gunmawasan.web.fc2.com/files/sangak-corner/hiejin.htm
キーワード:円3個,外円,半円2個,菱形
#Julia, #SymPy, #算額, #和算
外円内に弦を引き,菱形と天円と地円を入れる。地円,天円の直径がそれぞれ 7 寸,2 寸のとき,外円の直径はいかほどか。
菱形の対角線の長い方と短い方の長さをそれぞれ 2a, 2b とする。
外円の半径と中心座標を R, (0, 0)
天円の半径と中心座標を r1, (x1, y1)
地円の半径と中心座標を r2, (a, R - 2b + r2)
とおき,以下の連立方程式を解く。
include("julia-source.txt");
using SymPy
@syms R::positive, a::positive, b::positive, d,
r1::positive, x1::positive, y1::positive, r2::positive
eq1 = x1^2 + y1^2 - (R - r1)^2
eq2 = dist(0, R, a, R - b, a, R - 2b + r2) - r2^2
eq2 = div(numerator(apart(eq2, d)), b) # 分子だけを評価する
eq3 = 4(R^2 - (R - 2r1)^2) - (a^2 + b^2)
eq4 = a^2 + (R - b)^2 - R^2
eq5 = b/a - x1/y1;
res = solve([eq1, eq2, eq3, eq4, eq5], (R, a, b, x1, y1));
12 組の解が得られるが,すべてのパラメータの符号を考慮すると 7 番目のものが適解である。
res[7]
(8*r1^2/(4*r1 - r2), r2*sqrt(4*r1 + r2)*sqrt(1/(4*r1 - r2)), 4*r1 + r2, (r1 + r2/4)*sqrt(16*r1^2 - r2^2)/(4*r1 - r2), r2*(4*r1 + r2)/(4*(4*r1 - r2)))
外円の半径は「天円の半径を二乗したものを,天円半径の4倍から地円の半径を引いたもので割り,8 倍する」ことで得られる。
天円,地円の半径がそれぞれ 1 寸, 3.5 寸 のとき,外円の半径は 16 寸である。
天円,地円の直径がそれぞれ 2 寸, 7 寸 のとき,外円の直径は 32 寸である。
res[7][1](r1 => 2//2, r2 => 7//2) |> println
16
その他のパラメータは以下のとおりである。
R = 16; a = 13.5554; b = 7.5; x1 = 7.26184; y1 = 13.125
function draw(more=false)
pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
(r1, r2) = (2, 7) .// 2
t = 4*r1 - r2
u = 4*r1 + r2
(R, a, b, x1, y1) = (8r1^2/t, r2*sqrt(u/t), u, u*sqrt(t*u)/4t, r2*u/(4t))
@printf("天円の直径 = %g,地円の直径 = %g のとき,外円の直径 = %g\n", r1, r2, 2R)
@printf("R = %g; a = %g; b = %g; x1 = %g; y1 = %g\n", R, a, b, x1, y1)
plot([a, 0, -a, 0, a], [R - b, R, R - b, R - 2b, R - b], color=:green, lw=0.25)
circle(0, 0, R, :orange)
circle(x1, y1, r1)
circle(-x1, y1, r1)
circle(a, R - 2b + r2, r2, :blue, beginangle=90, endangle=270)
circle(-a, R - 2b + r2, r2, :blue, beginangle=270, endangle=450)
y0 = R - 2b
x0 = sqrt(R^2 - y0^2)
segment(-x0, y0, x0, y0, :magenta)
segment(a, y0, a, y0+2r2, :blue)
segment(-a, y0, -a, y0+2r2, :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)
end
end;