裏 RjpWiki

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

算額(その2051)

2024年08月30日 | Julia

算額(その2051)

七十四 群馬県甘楽郡妙義町菅原 菅原神社 嘉永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)


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

コメントを投稿

Julia」カテゴリの最新記事