算額(その313)
「三重県に現存する算額の研究」福島完(2007/2/13)
https://mie-u.repo.nii.ac.jp/?action=repository_uri&item_id=7216
三重県伊賀市 永保寺 弘化4年(1847)
問題文5
図のように,円の中に順次,正六花径,正三角形,正方形,正三角形,正方形をいれる。
最も内側の正方形の上辺から,その正方形が内接する正三角形の頂点までの距離(隅中径; 図の AB)が 1.39883135702…であるとき,それぞれの長さを求めよ。
内側の図形から順次長さを求める。
include("julia-source.txt");
using SymPy
@syms 隅中径::positive
隅中径 = Sym(1.39883135702)
隅中径 |> println
1.39883135702000
中方平面(小さい正方形の一辺)
@syms 中方平面::positive
eq1 = 隅中径/(中方平面/2) - sqrt(Sym(3))
中方平面 = solve(eq1, 中方平面)[1]
中方平面 = 2隅中径 / sqrt(Sym(3))
中方平面.evalf() |> println
1.61523132105277
小三角面(小さい正三角形の一辺)
@syms 小三角面::positive
小三角面 = (隅中径 + 中方平面) * 2/sqrt(Sym(3))
小三角面.evalf() |> println
3.48033979707944
小円ノ廻(小円の円周)
@syms 小円ノ廻::positive, 小円ノ径::positive
小円ノ径 = 小三角面/2 * (2/sqrt(Sym(3))) * 2
小円ノ廻 = 小円ノ径 * PI
小円ノ廻.evalf() |> println
12.6252762225235
大方平面(大きい正方形の一辺 = 小円ノ径)
@syms 大方平面
大方平面 = 小円ノ径
大方平面.evalf() |> println
4.01875023743036
大三角面(大きい正三角形の一辺)
@syms 大三角面
eq2 = (大方平面/2 * sqrt(Sym(3)) + 大方平面) * 2/sqrt(Sym(3)) - 大三角面
大三角面 = solve(eq2, 大三角面)[1]
大三角面 |> println
8.65920330020295
六角ノ面(正六角形の一辺)
@syms 六角ノ面
六角ノ面 = 大三角面/2 * 2/sqrt(Sym(3))
六角ノ面.evalf() |> println
4.99939335633987
矢(外円と正六角形の一辺が作る弦と外円との距離)
@syms 矢
矢 = 六角ノ面 - (六角ノ面/2 * sqrt(Sym(3)))
矢.evalf() |> println
0.669791706238393
同外径(大三角面外径;大きい正三角形の外接円の直径)
@syms 同外径
同外径 = 2六角ノ面
同外径.evalf() |> println
9.99878671267973
外円ノ廻(外円の円周)
@syms 外円ノ廻
外円ノ廻 = 同外径 * PI
外円ノ廻.evalf() |> println
31.4121148813659
using Plots
function draw(more=false)
pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
r = 9.99878671267973 / 2 # 外円の半径
x = zeros(7)
y = zeros(7)
for i = 1:7
θ = 60(i - 1) + 30
x[i] = r*cosd(θ)
y[i] = r*sind(θ)
end
plot()
circle(0, 0, r)
plot!(x, y, color=:blue, lw=0.5)
plot!(x[[2, 4, 6, 2]], y[[2, 4, 6, 2]], color=:green, lw=0.5)
rect(大方平面/2, y[6], -大方平面/2, y[6] + 大方平面, :orange)
delta = y[6] + 大方平面/2
circle(0, delta, 小円ノ径/2)
factor = 小円ノ径 / 同外径
plot!(factor .* x[[2, 4, 6, 2]], factor .* y[[2, 4, 6, 2]] .+ delta,
color=:green, lw=0.5)
rect(中方平面/2, factor * y[6] + delta,
-中方平面/2, factor * y[6] + delta + 中方平面, :magenta)
if more
point(0, 小円ノ径/2 + delta, " A", :red, :left, :bottom)
point(0, factor * y[6] + delta + 中方平面, " B", :red, :left, :bottom)
vline!([0], color=:black, lw=0.5)
hline!([0], color=:black, lw=0.5)
else
plot!(showaxis=false)
end
end;