以下の内容はhttps://sangaku0418.hatenablog.com/entry/2024/08/30/093657より取得しました。


算額(その1251)

七十四 群馬県甘楽郡妙義町菅原 菅原神社 嘉永4年(1851)

群馬県和算研究会:群馬の算額,上武印刷株式会社,高崎市,1987年3月31日.
キーワード:長方形,正五角形
#Julia #SymPy #算額 #和算 #数学


長方形の中に正五角形 3 個を容れる。長方形の短辺(直平)が与えられたとき,長方形の長辺(直長)を得る術を述べよ。

問題としては,正五角形の一辺の長さを与えて,直平,直長を求めさせるほうが素直な気がする。

1. 単純に \(x - y\) 座標を順に求める方法

正五角形の一辺の長さを \(a\)
点 \(α の座標を (α_x,\ α_y)\)
とおく。

include("julia-source.txt");  # 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 - \sqrt{5}}\cdot(5\sqrt{2} + 7\sqrt{10})/40 = 1.21392207235472\) 倍である。

3.07768353717525 * sqrt(5 - √5)*(5√2 + 7√10)/40

   3.7360679774997854

2. 正五角形の2点間の距離の累和を求める方法

正五角形の一辺の長さを \(a\)
正五角形の外接円の半径を \(r\)
とする。
\(CD = a = 2r\text{sind}(36)\)
\(PD = r = a/\text{sind}(36)\)
\(PL = r\cdot\text{cosd}(36)\)
\(IL = r(1 + \text{cosd}(36))\)
長辺は \( AC + CL + IF = EJ + a/2 + EJ\)
  \(= 2(2a\cdot\text{cosd}(36)) + a/2\)
短辺は \(BN + EM = 2IL = 2(IP + PL)\)
  \(= 2(r + r\cdot\text{cosd}(36))\)
  \(= 2r(1 + \text{cosd}(36))\)
  \(= 2a/2\text{sind}(36)\cdot(1 + \text{cosd}(36))\)
  \(= a/\text{sind}(36)\cdot (1 + \text{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 - \sqrt{5})\cdot(5\sqrt{2} + 7\sqrt{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)
   end
end;

draw(1, true)

draw(1, false)


以下のアイコンをクリックして応援してください




以上の内容はhttps://sangaku0418.hatenablog.com/entry/2024/08/30/093657より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14