算額(その1619)
福島県 福島郷社稲荷社 明治22年(1889)
~落書き帳「○△□」~ 600. 第9回【街角の問題】
http://streetwasan.web.fc2.com/math19.5.30.html
キーワード:円4個,正方形,対角線,斜線2本
#Julia, #SymPy, #算額, #和算, #数学
正方形の中に対角線(方斜)1 本,斜線 2 本を引き,区画された領域に等円 4 個を容れる。対角線の長さが 54.56 寸のとき,等円の直径はいかほどか。
ページの作者は,『原文では何故「方斜」を、それも「五十四寸五分六厘」という中途半端な数値で与えているのか。解いてみれば分からなくもありませんが、ここでは不問としておきましょう。』と言っている。
ここでは普通に(?),方斜ではなく正方形の一辺(方面)を与えて等円の直径を求めることにする(方斜が与えられたらそれを 1/√2 倍して,計算すればよい)。
正方形の一辺の長さを a
等円の半径と中心座標を r, (r, y), (x, r), (a- y, a - r), (a - r, a - x)
とおき,以下の連立方程式を解く。
include("julia-source.txt");
# julia-source.txt ソース https://blog.goo.ne.jp/r-de-r/e/ad3a427b84bb416c4f5b73089ae813cf
using SymPy
@syms a::positive, b::positive, r::positive, x::positive, y::positive
eq1 = dist2(0, a, b, 0, r, y, r)/b
eq2 = dist2(0, a, b, 0, x, r, r)/a
eq3 = dist2(0, 0, a, a, r, y, r)*2
eq4 = dist2(0, a, a, 0, x, r, r)*2
res = solve([eq1, eq2, eq3, eq4], (r, b, x, y))[4] # 4 of 5
(-a*sqrt(-1 + 2*sqrt(2))/2 + sqrt(2)*a/4 + sqrt(2)*a*sqrt(-1 + 2*sqrt(2))/4, a*(-sqrt(-1 + 2*sqrt(2)) + 1 + sqrt(2))/2, a*(-6*sqrt(-1 + 2*sqrt(2)) - 3*sqrt(2) + 4 + 5*sqrt(-2 + 4*sqrt(2)))/(2*(-3*sqrt(2) - 2*sqrt(-1 + 2*sqrt(2)) + sqrt(2)*sqrt(-1 + 2*sqrt(2)) + 6)), a*(-sqrt(-1/2 + sqrt(2))/2 + sqrt(2)/4 + 1/2))
# r
res[1] |> factor
SymPy ではこれ以上簡約化できないが,紙と鉛筆で
a*(sqrt(2√2 - 1)*(√2 - 2) + √2)/4
になる。
方斜が 54.56 寸のとき正方形の一辺の長さは a = 54.56/√2 なので,等円の半径は 6.000278751635302,直径は 12.000557503270604 である。
(54.56/√2)*(sqrt(2√2 - 1)*(√2 - 2) + √2)/4
6.000278751635302
方斜が 54.56 のとき,等円の直径は 12.0005575032706 である。
このとき正方形の一辺の長さは 38.579745981538 で,方斜よりもっときれいな数ではない。
正方形の一辺の長さが 21115(整数)のとき,等円の直径は 6568.00000193929 である。小数点のあと 5 個も 0 が続く。
しかしこのときの方斜は 29861.1193695079 で,きれいな数ではない。
function draw(a, more=false)
pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
(r, b, x, y) = (-a*sqrt(-1 + 2*sqrt(2))/2 + sqrt(2)*a/4 + sqrt(2)*a*sqrt(-1 + 2*sqrt(2))/4, a*(-sqrt(-1 + 2*sqrt(2)) + 1 + sqrt(2))/2, a*(-6*sqrt(-1 + 2*sqrt(2)) - 3*sqrt(2) + 4 + 5*sqrt(-2 + 4*sqrt(2)))/(2*(-3*sqrt(2) - 2*sqrt(-1 + 2*sqrt(2)) + sqrt(2)*sqrt(-1 + 2*sqrt(2)) + 6)), a*(-sqrt(-1/2 + sqrt(2))/2 + sqrt(2)/4 + 1/2))
方斜 = √2a
@printf("方斜 %.15g のとき,等円の直径は %.15g である。\n", 方斜, 2r)
@printf("a = %.15g; b = %g; r = %g; x = %g; y = %g\n", a, b, r, x, y)
plot([0, a, a, 0, 0], [0, 0, a, a, 0], color=:green, lw=0.5)
circle(r, y, r)
circle(a- y, a - r, r)
circle(x, r, r)
circle(a - r, a - x, r)
segment(0, 0, a, a, :blue)
segment(0, a, b, 0, :blue)
segment(0, a, a, a - b, :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(a, a, "(a,a)", :green, :right, :bottom, delta=delta/2)
point(b, 0, "(b,0) ", :green, :right, :bottom, delta=delta/2)
point(r, y, "等円:r,(r,y)", :red, :center, delta=-delta/2)
point(x, r, "等円:r,(x,r)", :red, :center, delta=-delta/2)
end
end;
#draw(54.56/√2, true)
draw(21115, true)