香川県善通寺市中村町 木熊野神社 安政5年(1858)
本田益夫:木熊野神社算額の問題解説(抄録),山陽和算研究会会誌,第29号,平成年5月20日.(香川県立図書館蔵)
キーワード:円弧
#Julia #SymPy #算額 #和算 #数学
奇数個の等円を重ねて描くとき,等円の直径と個数を与えて径線(図の AB の長さ)を得る術を述べよ。

等円の半径を \(r\),個数を \(n\) とおき,以下のように計算する。
等円の中心を結んでできるのは,正 \(n\) 角形である。
include("julia-source.txt"); # julia-source.txt ソース
using SymPy
@syms r::positive, n;
∠DOC = π/n
AB = AO + OB = AO + 2OC = AO + 2OD*cos(∠DOC) = AO + 2OD*cos(π/n) = 2r + 2r*cos(π/n)
# 径線の長さ
AB = 2r + 2r*cos(π/n) |> factor
\(\displaystyle 2 r \left(\cos{\left(\frac{\pi}{n} \right)} + 1\right)\)
等円の個数が \(n = 5\),半径が \(r = 1/2\) のとき,径線の長さは 1.80901699437495 である。
AB(n => 5, r => 1/2).evalf() |> println
1.80901699437495
和算家は三角関数の代わりに,「角中径率」を使った。
五角角中径率 = OD/DE = \(\sqrt{\sqrt{0.8} + 2}/2\)
五角角中径率 = sqrt(sqrt(Sym(4)/5) + 2)/2 # sqrt(sqrt(0.8) + 2)/2
五角角中径率 |> display
五角角中径率.evalf() |> println
\(\displaystyle \frac{\sqrt{\frac{2 \sqrt{5}}{5} + 2}}{2}\)
0.850650808352040
OC = sqrt(OD^2 - CD^2)
AB = AO + 2OC = 2r + 2sqrt(OD^2 - CD^2) = 2r + 2sqrt(OD^2 - (DE/2)^2) = 2r + 2sqrt(OD^2 - (OD/五角角中径率/2)^2)
= 2r + 2sqrt(r^2 - (r/(2*五角角中径率))^2)
AB = 2r + 2sqrt(r^2 - (r/(2*五角角中径率))^2) |> factor
\(\displaystyle \frac{r \left(\sqrt{2} \sqrt{2 \sqrt{5} + 5} + 2 \sqrt{\sqrt{5} + 5}\right)}{\sqrt{\sqrt{5} + 5}}\)
AB(n => 5, r => 1/2).evalf() |> println
1.80901699437495
術は以下の通りである。
@syms 等円径
五角角中径率 = sqrt(sqrt(Sym(4)/5) + 2)/2
# 五角角中径率 = sqrt(sqrt(0.8) + 2)/2
天 = 2五角角中径率
径線 = (sqrt(天^2 - 1)/天 + 1)*等円径
\(\displaystyle 等円径 \left(\frac{\sqrt{\frac{2 \sqrt{5}}{5} + 1}}{\sqrt{\frac{2 \sqrt{5}}{5} + 2}} + 1\right)\)
径線(等円径 => 1).evalf() |> println
1.80901699437495
描画関数プログラムのソースを見る
function draw(r, n, more=false)
pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
plot()
polygon(0, 0, r, n, color=:gray80)
for i = 0:n - 1
θ = 90 + i*(360/n)
circle(r*cosd(θ), r*sind(θ), r, beginangle=θ - 360/n, endangle=θ + 180)
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)
point(0, 2r, "A", :red, :center, :bottom, delta=delta/2)
point(0, r, "等円:r,(0,r)", :red, :center, :bottom, delta=delta/2, deltax=-2delta)
point(0, 0, "O ", :red, :right, :bottom, delta=delta/2)
point(0, -2r*cosd(180/n), "B", :red, :center, delta=-delta/2)
point(0, -r*cosd(180/n), "C", :red, :center, delta=-delta/2)
point(r*sind(180/n), -r*cosd(180/n), "D", :red, :center, delta=-delta/2)
point(-r*sind(180/n), -r*cosd(180/n), "E", :red, :center, delta=-delta/2)
end
end;
draw(1/2, 5, true)
以下のアイコンをクリックして応援してください