算額(その724)
百二十七 群馬県桐生市梅田町 日枝神社 明治12年(1879)
群馬県和算研究会:群馬の算額,上武印刷株式会社,高崎市,1987年3月31日.
群馬県桐生市梅田町 日枝神社 明治12年
https://gunmawasan.web.fc2.com/files/sangak-corner/hiejin.htm
キーワード:円4個,長方形,正方形3個,斜線2本
#Julia, #SymPy, #算額, #和算
長方形と輪(円)が交わってできる領域に 3 個の小円がある。
また,下部に 2 ほんの斜線を入れ,正方形を 3 個入れる。左右の正方形の 2 つの頂点は輪の円周上と斜線の上にある。中央の正方形の上辺は輪と接している。
小円の著系が 1 寸のとき,正方形の一辺の長さはいかほどか。
長方形の短辺と長辺を 2a, b とする。
輪の半径と中心座標を r1, (0, 2c + r1); a = r1
小円の半径と中心座標を r2, (a - r2, b - r2)
正方形の一辺の長さを 2c
として,以下の連立方程式を解く。
include("julia-source.txt");
using SymPy
@syms a::positive, b::positive, c::positive, r1::positive, r2::positive, y0::positive
a = r1
r2 = 1//2
eq1 = 2c + 2r1 - 2r2 - b
eq2 = y0/2c - 2c/(a - c)
eq3 = (a - 2c)^2 + (y0 + 2c - 2c - r1)^2 - r1^2
eq4 = ( a - r2)^2 + (b - r2 - 2c - r1)^2 - (r1 + r2)^2;
res = solve([eq1, eq2, eq3, eq4], (b, c, r1, y0))
4-element Vector{NTuple{4, Sym{PyCall.PyObject}}}:
(2*r2/5, r2/5, r2, r2/5)
(r2, r2/2, r2, 2*r2)
(98*r2/5, 9*r2/5, 9*r2, 9*r2/5)
(25*r2, 9*r2/2, 9*r2, 18*r2)
4 組の解が得られるが,3 番目のものが適解である。
r2 = 1/2 のとき,
(b, c, r1, y0) =(98*r2/5, 9*r2/5, 9*r2, 9*r2/5) = (9.8, 0.9, 4.5, 0.9) である。
すなわち,正方形の一辺の長さは小円の直径の 1.8 倍,すなわち 1 寸 8 分である。
r2 = 1/2
(98*r2/5, 9*r2/5, 9*r2, 9*r2/5)
(9.8, 0.9, 4.5, 0.9)
function draw(more=false)
pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
r2 = 1//2
(b, c, r1, y0) = (98*r2/5, 9*r2/5, 9*r2, 9*r2/5)
@printf("正方形の一辺の長さ = %g\n", 2c)
@printf("b = %g; c = %g; r1 = %g; y0 = %g\n", b, c, r1, y0)
a = r1
plot([a, a, -a, -a, a], [0, b, b, 0, 0], color=:black, lw=0.5)
circle(0, 2c + r1, r1)
circle(0, b + r2, r2, :blue)
circle(a - r2, b - r2, r2, :blue)
circle(r2 - a, b - r2, r2, :blue)
rect(-c, 0, c, 2c, :green)
rect(a - 2c, y0, a, y0 + 2c, :green)
rect(2c - a, y0, -a, y0 + 2c, :green)
segment(a, 0, c, 2c)
segment(-a, 0, -c, 2c)
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(a - 2c, y0 + 2c, " (a-2c,y0+2c)", delta=-delta/2)
point(a - 2c, y0, " (a-2c,y0)", :green, :left, :bottom, delta=delta/2)
point(c, 0, " c", :green, :left, :bottom, delta=delta/2)
point(0, 2c, " 2c", :green, :left, :bottom, delta=delta/2)
point(0, 2c + r1, " 輪:r1,(0,2c+r1)", :red, :left, :vcenter)
point(a - r2, b - r2, "小円:r2,(a-r2,b-r2) ", :blue, :right, :vcenter)
point(0, b + r2, " b+r2", :black, :center, :bottom, delta=delta/2)
point(a, b, "(a,b)", :black, :center, :bottom, delta=delta/2)
end
end;