算額(その1609)
福島県田村市船引町堀越明神前 明石神社(堀越明宮) 明治11年(1878)
http://www.wasan.jp/fukusima/horikosiakasi.html
キーワード:直角三角形,正五角形
#Julia, #SymPy, #算額, #和算, #数学
直角三角形の中に弦(斜辺)と股(底辺)を共有し,残りの頂点が鈎(高さ)上にある正五角形を容れる。
正五角形の一辺の長さが与えられたとき,股,鈎はいかほどか。
正五角形の一辺の長さを a, 正五角形を内接する円の半径を r とする。
include("julia-source.txt");
# julia-source.txt ソース https://blog.goo.ne.jp/r-de-r/e/ad3a427b84bb416c4f5b73089ae813cf
using SymPy
@syms r::positive, 股::positive, a::positive
s36 = Sym(36)
s18 = s36/2
r = a/2sind(s36);
直角三角形の鈎は a*sqrt(sqrt(5)/8 + 5/8) + 2*a*sqrt(5/8 - sqrt(5)/8),
正五角形の一辺の長さが 1 のとき,鈎 = 2.12662702088010 である。
鈎 = 2a*sind(s36) + a*cosd(s18)
鈎 |> println
鈎(a => 1).evalf() |> println
a*sqrt(sqrt(5)/8 + 5/8) + 2*a*sqrt(5/8 - sqrt(5)/8)
2.12662702088010
直角三角形と内部にある直角三角形の相似関係から,股を求める。
eq = 鈎/股 - (r + r*cosd(s36))/(股 - a/2 - a*sind(s18))
ans_股 = solve(eq, 股)[1];
股は √5 が二重根号の中にある複雑な式になり SymPy では自動では簡約化(有理化)できない。
正五角形の一辺の長さが 1 のとき,直角三角形の股(底辺)は 2.92705098312484 である。
ans_股 |> println
ans_股(a => 1).evalf() |> println
sqrt(5)*a*(sqrt(sqrt(5) + 5) + 2*sqrt(5 - sqrt(5)))/(-3*sqrt(5)*sqrt(5 - sqrt(5)) - sqrt(5)*sqrt(sqrt(5) + 5) + 5*sqrt(5 - sqrt(5)) + 5*sqrt(sqrt(5) + 5))
2.92705098312484
SymPy の手を借りながら(詳細省略),手動で有理化する。
num = ans_股 |> numerator
den = ans_股 |> denominator
d1 = den.args[1]
d2 = den.args[2]
d3 = den.args[3]
d4 = den.args[4]
den2 = den *(d1 + d2 + d3 + d4) |> expand |> simplify
num2 = num *(d1 + d2 + d3 + d4) |> expand |> simplify
ans_股2 = num2/den2 |> sympy.sqrtdenest |> simplify |> factor;
簡潔な式になった。
股 = a*(5 + 3√5)/4 で,正五角形の一辺の長さが 1 のとき,直角三角形の股(底辺)は 2.92705098312484 である。
ans_股2 |> println
ans_股2(a => 1).evalf() |> println
a*(5 + 3*sqrt(5))/4
2.92705098312484
function draw(a, more=false)
pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
r = a/2sind(36)
股 = sqrt(5)*a*(sqrt(sqrt(5) + 5) + 2*sqrt(5 - sqrt(5)))/(-3*sqrt(5)*sqrt(5 - sqrt(5)) - sqrt(5)*sqrt(sqrt(5) + 5) + 5*sqrt(5 - sqrt(5)) + 5*sqrt(sqrt(5) + 5))
鈎 = 2a*sind(36) + a*cosd(18)
println("股 = $股, 鈎 = $鈎")
plot([0, 股, 0, 0], [0, 0, 鈎, 0], color=:blue, lw=0.5)
plot!([0, a*sind(18), a*sind(18) + a, 2a*sind(18) + a, a*sind(18) + a/2, 0],
[a*cosd(18), 0, 0, a*cosd(18), r + r*cosd(36), a*cosd(18)], color=:red, lw=0.5)
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(a*sind(18), 0, "a*sind(18)", :red, :center, delta=-delta)
point(a*sind(18) + a/2, 0, "a*sind(18)+a/2", :red, :left, delta=-delta, deltax=-3delta)
point(股, 0, "股", :red, :center, delta=-delta)
point(0, a*cosd(18), " a*cosd(18) ", :red, :left, :vcenter)
point(0, 鈎, " 鈎=a*cosd(18) + 2rsind(36)", :red, :left, :vcenter)
dimension_line(a*sind(18) + a/2, 0, a*sind(18) + a/2, r + r*cosd(36), " (a*sind(18)+a/2, r+r*cosd(36))", :blue, :center, :vcenter)
segment(a*sind(18) + a/2, 0, a*sind(18) + a/2, r + r*cosd(36), :gray80)
dimension_line(a*sind(18) + a/2, 0, 股, 0, " x=股-a*sind(18)-a/2", :blue, delta=2delta, dy=-5delta)
ylims!(-8delta, 鈎 + 3delta)
end
end;
draw(1, true)