算額(その1439)
郡山市西田町 旧土棚村 鹿嶋神社 明治16年(1883)
~落書き帳「○△□」~ 79. 金木犀の花びら
http://streetwasan.web.fc2.com/math15.9.3.html
キーワード:正方形,正五角形
#Julia, #SymPy, #算額, #和算
正方形と正五角形が図のように重なっている。正方形の一辺の長さが与えられたとき,正五角形の一辺の長さを求めよ。
正方形の一辺の長さを a
正五角形の一辺の長さを b
正五角形の外接円の半径を r
正五角形の高さを h
とおき,以下の方程式を解く。
include("julia-source.txt");
# julia-source.txt ソース https://blog.goo.ne.jp/r-de-r/e/ad3a427b84bb416c4f5b73089ae813cfusing SymPy
@syms a::positive, b::positive, r::positive, h::positive
eq1 = r*sind(Sym(36)) - b/2
eq2 = (r + r*cosd(Sym(36))) - h
eq3 = (a/2 - b /2)/(h - a) - tand(Sym(18))
res = solve([eq1, eq2, eq3], (b, r, h))
それぞれの式は長いが,かなり簡約化できる。
# b
@syms d
res[b]/a |> x -> apart(x, d) |> factor |> x -> a*x |> println
res[b](a => 1).evalf() |> println
a*(2*sqrt(5)*sqrt(5 - 2*sqrt(5)) + 5)/10
0.824919696232906
正五角形の一辺の長さは,正方形の一辺の長さの (2√5sqrt(5 - 2√5) + 5)/10 倍である。
正方形の一辺の長さが 1 のとき,正五角形の一辺の長さは 0.824919696232906 である。
# r
res[r]/a |> x -> apart(x, d) |> factor |> x -> a*x |> println
res[r](a => 1).evalf() |> println
a*(-2*sqrt(5) + 5*sqrt(5 - 2*sqrt(5)) + 3*sqrt(5)*sqrt(5 - 2*sqrt(5)) + 10)/20
0.701718606426041
# h
res[h]/a |> x -> apart(x, d) |> factor |> x -> a*x |> println
res[h](a => 1).evalf() |> println
a*(2*sqrt(5 - 2*sqrt(5)) + sqrt(5)*sqrt(5 - 2*sqrt(5)) + 2)/4
1.26942088429381
function draw(a, more)
pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
t = sqrt(5 - 2√5)
b = a*(2*sqrt(5)*sqrt(5 - 2*sqrt(5)) + 5)/10
r = a*(-2*sqrt(5) + 5*sqrt(5 - 2*sqrt(5)) + 3*sqrt(5)*sqrt(5 - 2*sqrt(5)) + 10)/20
h = a*(2*sqrt(5 - 2*sqrt(5)) + sqrt(5)*sqrt(5 - 2*sqrt(5)) + 2)/4
x = [r*cosd(18), 0, -r*cosd(18), -r*sind(36), r*sind(36), r*cosd(18)]
y = [r*cosd(36) + r*sind(18), h, r*cosd(36) + r*sind(18), 0, 0, r*cosd(36) + r*sind(18)]
@printf("正方形の一辺の長さが %g のとき,正五角形の一辺の長さは %g である。\n", a, b)
plot(x, y, color=:blue, lw=0.5)
circle(0, r*cosd(36), r)
rect(-a/2, h - a, a/2, h, :green)
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, h, "h", :red, :center, :bottom, delta=delta/2)
point(b/2, 0, "b/2 ", :blue, :right, :bottom, delta=delta/2)
point(a/2, h - a, "(a/2,h-a) ", :green, :right, :bottom, delta=delta/2)
point(0, r*cosd(36), "外接円の中心", :red, :center, delta=-delta/2)
point(0.82492/2,0,"***")
end
end;
draw(1, true)
※コメント投稿者のブログIDはブログ作成者のみに通知されます