算額(その1594)
深川英俊,トニー・ロスマン:聖なる数学:算額,p. 114,森北出版株式会社,2010年4月22日.
キーワード:正12角形2個,対角線
#Julia, #SymPy, #算額, #和算, #数学
図に示すような正12角形の24本の対角線の長さの和が与えられたとき,内部にできる小さな正12角形の一辺の長さを求める術を述べよ。
外側の正12角形が内接する円の直径を R
内側の正12角形が内接する円の直径を r
とすると,
a = c*tan(15°), c = (a + b)*tan(15°)
対角線の長さの和を l とすると,
l = 12*2*(a + b)
より,以下の連立方程式を解き,a, b を求める。
include("julia-source.txt");
# julia-source.txt ソース https://blog.goo.ne.jp/r-de-r/e/ad3a427b84bb416c4f5b73089ae813cf
using SymPy
@syms a::positive, b::positive, c::positive,
l::positive
eq1 = (a + b)*tand(Sym(15)) - a/tand(Sym(15))
eq2 = 12*2(a + b) - l;
表には出てこないが,tan(15°) = 2 - √3 なので,
eq1 = -2*sqrt(3)*a - sqrt(3)*b + 2*b
である。
連立方程式を解いて,a, b を求める。
res = solve([eq1, eq2], (a, b));
# a
res[a] |> simplify |> println
l*(7 - 4*sqrt(3))/24
l = 150 のとき,a = 0.897459621556135 である。
2*res[a](l => 150).evalf() |> println
0.897459621556135
長精度演算すると以下のようになる。
2*150*(7 - 4*sqrt(big"3"))/24
0.897459621556135323627682924706381...
# b
res[b] |> simplify |> println
l*(-3 + 2*sqrt(3))/12
a = r*sin(15°) なので,
r = a/sin(15°)
c = R*sin(15°) なので,
R = c/sin(15°)
c = (a + b)*tan(15°) なので,
R = (a + b)*tan(15°)/sin(15°)
function draw(n, l, more=false)
pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
a = l*(7 - 4√3)/24
b = l*(2√3 - 3)/12
r = a/sind(15)
R = (a + b)*tand(15)/sind(15)
x = [R*cosd(z) for z = 0:360/n:360]
y = [R*sind(z) for z = 0:360/n:360]
c = R*sind(15)
plot()
for i = 1:n
segment(x[i], y[i], x[mod(i - 2 + (n + 1)÷2, n) + 1], y[mod(i - 2 + (n + 1)÷2, n) + 1], :brown, lw=0.3)
end
circle(0, 0, R, :green)
circle(0, 0, r, :red)
circle(0, 0, c, :blue)
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(r, 0, " r", :red, :left, :bottom, delta=delta/5)
point(c, 0, "c ", :blue, :right, :bottom, delta=delta/5)
lens!([0, 0.2], [-0.01, 0.2], inset = (1, bbox(0.7, 0.0, 0.3, 0.35)))
end
end;
draw(12, 15, true)