算額(その1136)
一七 大里郡岡部村岡 稲荷社 文化14年(1817)
埼玉県立図書館:埼玉県史料集 第二集『埼玉の算額』,昭和44年,誠美堂印刷所,埼玉県与野市.
キーワード:円2個,等脚台形,正五角形
等脚台形の中に,倒立した正五角形を容れ,隙間に 2 個の等円を容れる。等円の直径が 0.318 寸のとき,上頭と下頭(上底と下底)の積はいかほどか。
上頭(正五角形の一辺の長さ)を 2a とする。
このとき,図に示すように上頭を対称軸に正五角形を描くとき,その頂点と下頭頂点を結ぶ直線は等脚台形の斜辺に一致し,また,2 つの三角形は相似で相似比が 1:2 なので,下頭は上頭の2倍すなわち 4a である。
正五角形を内包する円の半径を R,正五角形の高さを h
等円の半径と中心座標を r, (x, r)
とおき,以下の連立方程式を解く。
include("julia-source.txt")
using SymPy
@syms a::positive, r::positive, x::positive
eq1 = dist2(2a, 0, 2a*cosd(Sym(36)), 2a*sind(Sym(36)), x, r, r)
eq2 = dist2( 0, 0, 2a*cosd(Sym(36)), 2a*sind(Sym(36)), x, r, r);
res = solve([eq1, eq2], (a, x))[4] # 4 of 4
((sqrt(2)*r + (r*(sqrt(2) + sqrt(10))/(2*sqrt(5 - sqrt(5))) + 2*sqrt(2)*r/sqrt(5 - sqrt(5)))*(sqrt(25 - 5*sqrt(5))/2 + 3*sqrt(5 - sqrt(5))/2))/(sqrt(5 - sqrt(5))*(sqrt(5) + 3)) + sqrt(5)*sqrt(-sqrt(5)*r^2 + 3*r^2 + (-2*sqrt(10)*r*sqrt(5 - sqrt(5)) - 4*sqrt(2)*r*sqrt(5 - sqrt(5)))*(r*(sqrt(2) + sqrt(10))/(2*sqrt(5 - sqrt(5))) + 2*sqrt(2)*r/sqrt(5 - sqrt(5))) + (sqrt(5) + 5)*(r*(sqrt(2) + sqrt(10))/(2*sqrt(5 - sqrt(5))) + 2*sqrt(2)*r/sqrt(5 - sqrt(5)))^2)/(sqrt(5 - sqrt(5))*(sqrt(5) + 5)), r*(sqrt(2) + sqrt(10))/(2*sqrt(5 - sqrt(5))) + 2*sqrt(2)*r/sqrt(5 - sqrt(5)))
a はさほど簡単な式にはならない.
ans_a = res[1] |> simplify |> factor
ans_a |> println
r*sqrt(5 - sqrt(5))*(2*sqrt(10) + 5*sqrt(2))/10
ところが,上頭 = 2a,下頭 = 4a で,上頭*下頭 = 8a^2 を計算すると極めて簡潔な式になる。
res3 = 2ans_a * 4ans_a |> simplify
res3 |> println
r^2*(44*sqrt(5)/5 + 20)
この式に,問で与えられた「等円の直径が 0.318 寸」を代入すると 1.00308430394472 になり,「答」にあるように,「1.00寸有奇」ときれいな数値になる。
res3(r => 0.318/2).evalf() |> println
1.00308430394472
r がいくつのときに正確に 1 になるかを求めるには以下のようにすればよい。
solve(res3 - 1, r)[1] |> println
solve(res3 - 1, r)[1].evalf() |> println
sqrt(5)/(2*sqrt(11*sqrt(5) + 25))
0.158755363590950
r が sqrt(5)/(2*sqrt(11*sqrt(5) + 25)) = 0.158755363590950 のとき,上頭 2a,下頭 4a はそれぞれ,sqrt(2)/2, sqrt(2) となり,かけ合わせれば正確に 1 になることがわかる。
@syms d
apart(2ans_a(r => sqrt(Sym(5))/(2*sqrt(11*sqrt(Sym(5)) + 25))), d)|> simplify |> println
apart(4ans_a(r => sqrt(Sym(5))/(2*sqrt(11*sqrt(Sym(5)) + 25))), d)|> simplify |> println
sqrt(2)/2
sqrt(2)
解を求めるうえでは重要ではないが,図を描くために x も求めておこう。
@syms d
ans_x = res[2] |> simplify
ans_x = apart(ans_x) |> simplify
ans_x |> println
r*sqrt(5 - sqrt(5))*(sqrt(10) + 3*sqrt(2))/4
パラメータは以下の通りである。
r = 0.15875536359095; x = 0.488598768962138; R = 0.601500955007548; h = 1.08812544974141
a = 0.353553390593275; 上頭 = 2a = 0.70710678118655; 下頭 = 4a= 1.4142135623731; 上頭×下頭 = 1.00000000000001
function draw(r, more=false)
pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
a = r*sqrt(5 - sqrt(5))*(2*sqrt(10) + 5*sqrt(2))/10
x = r*sqrt(5 - sqrt(5))*(sqrt(10) + 3*sqrt(2))/4
R = a/sind(36)
h = R*cosd(36) + R
@printf("r = %.15g; x = %.15g; R = %.15g; h = %.15g\n", r, x, R, h)
@printf("a = %.15g; 上頭 = 2a = %.15g; 下頭 = 4a= %.15g; 上頭×下頭 = %.15g\n", a, 2a, 4a, 8a^2)
plot(showaxis=false)
circle(0, R, R)
circle(0, 2h - R, R, :pink1)
circle(x, r, r, :green)
θ = -90:72:270
xa = @. R*cosd(θ)
ya = @. R*(1 + sind(θ))
for i = 1:5
segment(xa[i], ya[i], xa[i + 1], ya[i + 1], :blue)
segment(xa[i], 2h - ya[i], xa[i + 1], 2h - ya[i + 1], :paleturquoise3)
end
plot!([0, 2a, 0, 0], [0, 0, 2h, 0], color=:magenta, lw=0.5)
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(2a, 0, " 2a", :magenta, :left, :bottom, delta=delta/2)
point(a, h, " (a,h)", :magenta, :left, :vcenter)
point(0, 2h, "(0,2h)", :magenta, :center, :bottom, delta=delta/2)
point(x, r, " r,(x,r)", :green, :center, delta=-delta/2)
point(0, R, " R", :blue, :left, :vcenter)
end
end;