算額(その1012)
八七 加須市大越六間 天神社 明治14年(1881)
埼玉県立図書館:埼玉県史料集 第二集『埼玉の算額』,昭和44年,誠美堂印刷所,埼玉県与野市.
5 個の等円が隣同士外接し,かつ,内側にある正五角形の辺にも外接している。等円の直径が 49.0165 寸のとき,正五角形の一辺の長さを求めよ。
等円の中心は,原点 O を中心とする半径 OA の円周上にある。OA = r1 + r2*cos(36°)
等円の半径 AD = r1
AB/2 = r1 = OA*sin(36°)
正五角形の頂点は,原点 O を中心とする半径 OC の円周上にある。 OC = r2 = 4r1*(-sqrt(5 - √5) + 2√2)/((1 + √5)*sqrt(5 - √5))
∠COD は 36°
正五角形の辺と等円の接点は,原点 O を中心とする半径 OD の円周上にある。
正五角形の一辺の長さは 2CD = 2OC*sin(36°)
等円の直径 2r1 = 49.0165 のとき,五角形の一辺の長さは 24.97515419514368 である。
術では五角形の一辺の長さは 25 寸とあるが,正確ではない。
正確に25 寸であるためには等円の直径が 49.0652626376286 でなければならない。
問で「等円径四十九寸令壱リ六毛五糸」とあるのが誤記で,「等円径四十九寸令分六釐五毛」なのかもしれない。
以下により,r1, r2 を求め,正五角形の一辺の長さ 2r2*sin(36°) = 24.97515419514368 を求める。
include("julia-source.txt");
using SymPy
@syms r1::poitive, r2::poitive
eq1 = (r1 + r2*cosd(Sym(36)))*sind(Sym(36)) - r1;
solve(eq1, r2)[1] |> println
4*r1*(-sqrt(5 - sqrt(5)) + 2*sqrt(2))/((1 + sqrt(5))*sqrt(5 - sqrt(5)))
r1 = 49.0165/2
r2 = 4*r1*(-sqrt(5 - sqrt(5)) + 2*sqrt(2))/((1 + sqrt(5))*sqrt(5 - sqrt(5)))
2r2*sind(36)
24.97515419514368
function draw(more=false)
pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
r1 = 49.0165/2
r2 = 4r1*(-sqrt(5 - √5) + 2√2)/((1 + √5)*sqrt(5 - √5))
l = 2r2*sind(36)
println("i = $l")
θ = 54:72:414
x = cosd.(θ)
y = sind.(θ)
plot()
r0 = r1 + r2*cosd(36)
for i = 1:5
segment(r2*x[i], r2*y[i], r2*x[i + 1], r2*y[i + 1], :blue, lw=0.5)
circle(r0*cosd(θ[i] + 36), r0*sind(θ[i] + 36), r1)
end
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)
circle(0, 0, r0, :gray70)
#circle(r0*cosd(θ[1] + 36), r0*sind(θ[1] + 36), r1, :magenta)
point(r0*cosd(θ[1] + 36), r0*sind(θ[1] + 36), " A", :green, :left, :bottom, delta=delta/2)
segment(0, 0, r0*cosd(θ[1] + 36), r0*sind(θ[1] + 36), :green)
point(r0*cosd(θ[5] + 36), r0*sind(θ[5] + 36), " B")
segment(r0*cosd(θ[1] + 36), r0*sind(θ[1] + 36), r0*cosd(θ[5] + 36), r0*sind(θ[5] + 36), :green)
point(0, 0, " O", :green, :left, delta=-delta/2)
circle(0, 0, r2, :gray80)
point(r2*cosd(θ[1]), r2*sind(θ[1]), "C", :green, :left, :bottom, delta=0.1delta, deltax=0.3delta)
segment(0, 0, r2*cosd(θ[1]), r2*sind(θ[1]), :green)
point(0, r2*sind(θ[1]), " D", :green, :left, delta=-delta/2)
circle(0, 0, r2*sind(θ[1]), :gray80)
end
end;