算額(その1251)
七十四 群馬県甘楽郡妙義町菅原 菅原神社 嘉永4年(1851)
群馬県和算研究会:群馬の算額,上武印刷株式会社,高崎市,1987年3月31日.
キーワード:長方形,正五角形3個
長方形の中に正五角形 3 個を容れる。長方形の短辺(直平)が与えられたとき,長方形の長辺(直長)を得る術を述べよ。
問題としては,正五角形の一辺の長さを与えて,直平,直長を求めさせるほうが素直な気がする。
1. 単純に x-y 座標を順に求める方法
正五角形の一辺の長さを a
点 α の座標を (αx, αy)
とおく。
include("julia-source.txt");
using SymPy
@syms a::positive;
cosd2(θ) = 2cosd(θ/2)^2 - 1
sind2(θ) = 2sind(θ/2)*cosd(θ/2)
(s36, s72, s18) = (Sym(36), Sym(72), Sym(18))
(Ax, Ay) = (0, a*sind(s36))
(Bx, By) = (Ax + a*cosd(s36), 0)
(Cx, Cy) = (Bx + a*cosd(s36), By + a*sind(s36))
(Dx, Dy) = (Cx + a, Cy)
(Ex, Ey) = (Dx +a*cosd2(s72), Dy + a*sind2(s72))
(Fx, Fy) = (Ex + a*cosd(s36), Ey + a*sind(s36))
(Gx, Gy) = (Fx - a*cosd2(s72), Fy + a*sind2(s72))
直長 = Fx |> simplify
直平 = Gy |> simplify |> sympy.sqrtdenest |> factor;
直長 |> println
直長(a => 1).evalf() |> println
直平 |> println
直平(a => 1).evalf() |> println
a*(3 + 2*sqrt(5))/2
3.73606797749979
a*sqrt(5 - sqrt(5))*(sqrt(10) + 3*sqrt(2))/4
3.07768353717525
@syms d
f = apart(直長/直平, d) |> simplify
f |> println
f.evalf() |> println
sqrt(5 - sqrt(5))*(5*sqrt(2) + 7*sqrt(10))/40
1.21392207235472
直長は直平の sqrt(5 - √5)*(5√2 + 7√10)/40 = 1.21392207235472 倍である。
3.07768353717525 * sqrt(5 - √5)*(5√2 + 7√10)/40
3.7360679774997854
2. 正五角形の2点間の距離の累和を求める方法
正五角形の一辺の長さを a,正五角形の外接円の半径を r とする。
CD = a = 2r*sind(36)
PD = r = a/sind(36)
PL = r*cosd(36)
IL = r*(1 + cosd(36))
長辺は AC + CL + IF = EJ + a/2 + EJ = 2(2a*cosd(36)) + a/2
短辺は BN + EM = 2IL = 2(IP + PL) = 2(r + r*cosd(36)) = 2r(1 + cosd(36)) = 2a/2sind(36)*(1 + cosd(36)) = a/sind(36)*(1 + cosd(36))
@syms a::positive, d;
直長 = 2(2a*cosd(Sym(36))) + a/2 |> simplify
直平 = a/sind(Sym(36))*(1 + cosd(Sym(36))) |> simplify |> factor;
直長 |> println
直長(a => 1).evalf() |> println
直平 |> println
直平(a => 1).evalf() |> println
a*(3 + 2*sqrt(5))/2
3.73606797749979
sqrt(2)*a*(sqrt(5) + 5)/(2*sqrt(5 - sqrt(5)))
3.07768353717525
直平の式の見かけは前述のものと異なるが,直長/直平の比は同じである。
@syms d
f = apart(直長/直平, d) |> simplify
f |> println
f.evalf() |> println
sqrt(5 - sqrt(5))*(5*sqrt(2) + 7*sqrt(10))/40
1.21392207235472
直長は直平の sqrt(5 - √5)*(5√2 + 7√10)/40 = 1.21392207235472 倍である。
3.07768353717525 * sqrt(5 - √5)*(5√2 + 7√10)/40
3.7360679774997854
3. 正五角形の一辺の長さを a としたときの図(a = 1)
cosd2(θ) = 2cosd(θ/2)^2 - 1
sind2(θ) = 2sind(θ/2)*cosd(θ/2)
function draw(a, more=false)
pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
EJ = 2a*cosd(36)
r = a/2sind(36)
(Ax, Ay) = (0, a*sind(36))
(Bx, By) = (Ax + a*cosd(36), 0)
(Cx, Cy) = (Bx + a*cosd(36), By + a*sind(36))
(Dx, Dy) = (Cx + a, Cy)
(Ex, Ey) = (Dx +a*cosd2(72), Dy + a*sind2(72))
(Fx, Fy) = (Ex + a*cosd(36), Ey + a*sind(36))
(Gx, Gy) = (Fx - a*cosd2(72), Fy + a*sind2(72))
(Hx, Hy) = (Gx - a, Gy)
(Ix, Iy) = (Fx - EJ, Fy)
(Jx, Jy) = (Ex - EJ, Ey)
(Kx, Ky) = (Jx - a, Jy)
直長 = a*(3 + 2√5)/2
直平 = √2*a*(√5 + 5)/(2*sqrt(5 - √5))
plot([Ax, Bx, Cx, Dx, Ex, Fx, Gx, Hx, Ix, Jx, Kx, Ax],
[Ay, By, Cy, Dy, Ey, Fy, Gy, Hy, Iy, Jy, Ky, Ay],
color=:blue, lw=0.5)
plot!([0, 直長, 直長, 0, 0], [0, 0, 直平, 直平, 0], color=:green, lw=0.5)
segment(Ex, Ey, Ix, Iy, :blue)
segment(Cx, Cy, Jx, Jy, :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)
circle(EJ + r*sind(36), Iy - r, r, :red)
point(Ax, Ay, " A", :green, :left, :vcenter)
point(Bx, By, " B")
point(Cx, Cy, " C")
point(Dx, Dy, " D")
point(Ex, Ey, " E")
point(Fx, Fy, " F")
point(Gx, Gy, " G")
point(Hx, Hy, " H")
point(Ix, Iy, "I ", :green, :right, :bottom)
point(Jx, Jy, " J")
point(Kx, Ky, " K")
point(EJ + r*sind(36), Iy - r, " P", :red)
point(EJ + r*sind(36), Cy, " L", :green)
else
plot!(showaxis=false)
end
end;
draw(1, true)
draw(1, false)