算額(その926)
群馬県安中市鷺宮 咲前神社 明治20年(1887)
「算額」第三集 全国調査,香川県算額研究会
大円に内接する正五角形と,外円に内接すると同時に隣同士外接する 10 個の等円がある。大円の直径が 17 寸のとき,正五角形の一辺の長さと等円の直径を求めよ。
問題を一般化し,正 n 角形を考える。
図は,正六角形の場合で,外円の直径が 36 寸 のとき,正六角形の一辺の長さは 9 寸,等円の直径は 7.40177 寸である。
大円の半径を R,正 n 角形の一辺の長さを p,等円の半径を r とする。
include("julia-source.txt");
using SymPy
@syms R::positive, r::positive, p::positive,
n::integer
eq_p = R*sind(Sym(180)/n) - p
eq_r = (R - r)sind(Sym(90)/n) - r
p = solve(eq_p, p)[1]
r = solve(eq_r, r)[1]
(p, r)
(R*sin(pi/n), R*sin(pi/(2*n))/(sin(pi/(2*n)) + 1))
p, r は R と n により決まるので,以下のような関数を定義しておけばよい。
R として大円の直径を与えれば,正 n 角形の一辺の長さと等円の直径を返す。
R として大円の半径を与えれば,正 n 角形の一辺の長さの 1/2 と等円の半径を返す。
func(R, n) = (R*sin(pi/n), R*sin(pi/(2*n))/(sin(pi/(2*n)) + 1));
大円の直径が 17 のとき,正五角形の一辺の長さは 9.992349288972044 寸,等円の直径は 4.013155617496424寸 である。
func(17, 5)
(9.992349288972044, 4.013155617496424)
function draw(more=false)
pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
(R, n) = (18, 6)
(p, r) = func(R, n)
@printf("外円の直径が %g 寸 のとき,正%i角形の一辺の長さは %g 寸,等円の直径は %g 寸である。\n", 2R, n, p, 2r)
plot()
circle(0, 0, R, :blue)
θ = range(90, 450, length=n + 1)
x = @. R*cosd(θ)
y = @. R*sind(θ)
for i in 1:n
segment(x[i], y[i], x[i + 1], y[i + 1], :green)
end
rotate((R - r)*cosd(90 + 90/n), (R - r)*sind(90 + 90/n), r, angle=180/n)
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(0, R, " R", :blue, :left, :bottom, delta=delta/2)
end
end;