裏 RjpWiki

Julia ときどき R, Python によるコンピュータプログラム,コンピュータ・サイエンス,統計学

算額(その1439)

2024年11月30日 | Julia

算額(その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)

 


コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« 算額(その1438) | トップ |   
最新の画像もっと見る

コメントを投稿

Julia」カテゴリの最新記事