裏 RjpWiki

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

算額(その597)

2023年12月29日 | Julia

算額(その597)

七六 北埼玉郡騎西町中種足 雷神社 明治5年(1872)
埼玉県立図書館:埼玉県史料集 第二集『埼玉の算額』,昭和44年,誠美堂印刷所,埼玉県与野市.

東京都中央区 福徳神社 令和2年(2020)
http://www.wasan.jp/tokyo/hukutoku1.html

キーワード:正九角形2個,外円,三角形9個

第4問. 大小の正9角形の頂点を線分で結び,三角形と小9角形の面積を等しくなるようにする。大きい9角形の一辺が 1 のとき,小さい9角形の一辺はいかほどか。

これは,術にもあるように簡単で,暗算でもできる。
9 個の三角形は相互に相似で,小9角形の面積は三角形の面積に等しいならば,小9角形は大9角形の 1/10 の面積である。相似比は 1:(1/√10) である。
つまり,大9角形の一辺の長さが 1 のとき,小9角形の一辺の長さは 0.31622776601683794 である。

1/√10

   0.31622776601683794

連立方程式を立てて解くほうが面倒だ。

三角形 BAR において,∠BAR = 40° で,第二余弦定理を使う。
BR^2 = AB^2 + AR^2 - 2AB*AR*cos(2pi/9)
大きい正9角形が内接する円の半径を R とする。
小さい正9角形の一辺の長さを L とする。
小さい正9角形が内接する円の半径 r は R の 1/√10 倍である。
AR = AB + L

include("julia-source.txt");

using SymPy

@syms R::positive, a::positive, c::positive, L::positive,
     x::negative, y::positive  # x < 0

x0 = R*cosd(Sym(40))
y0 = R*sind(Sym(40))
c = 2R*sind(Sym(20))
L = 2R*sind(Sym(20))/sqrt(Sym(10))  # c/sqrt(Sym(10))
eq1 = (x0 - x)^2 + (y0 - y)^2 - a^2
eq2 = (R - x)^2 + y^2 - (a + L)^2
eq3 = a^2 + (a + L)^2 -2a*(a + L)*cosd(Sym(40)) - c^2;

ans_a = solve(eq3, a)[1] |> simplify
ans_a |> println

   sqrt(10)*R*(-sin(pi/9) + sqrt(sin(pi/9)^2 + 9))/10

eq1 = eq1(a => ans_a) |> expand |> simplify
eq2 = eq2(a => ans_a) |> expand |> simplify
res = solve([eq1, eq2], (x, y))[1]

   (R*(-10*sqrt(sin(pi/9)^2 + 9)*sin(pi/9)^2 - (36*cos(2*pi/9) + 56)*sin(pi/9)^3 + (2 - cos(pi/9))*sqrt(sin(pi/9)^2 + 9) + 10*(2 - cos(pi/9))*sin(pi/9))/(80*sin(pi/9)^3), -R*(-18*sqrt(3)*cos(pi/9) - 4*sqrt(19/2 - cos(2*pi/9)/2)*cos(pi/9) + 2*sqrt(19/2 - cos(2*pi/9)/2) + 20*sin(pi/9) + 34*sin(2*pi/9))/(160*sin(pi/9)^2))

@syms t, u
res[1](sin(PI/9) => t, cos(PI/9) => u) |> expand |> simplify |> println

   R*(t^3*(-92 + 72*sin(pi/9)^2) - 10*t^2*sqrt(t^2 + 9) + 10*t*(2 - u) + (2 - u)*sqrt(t^2 + 9))/(80*t^3)

res[2](sin(PI/9) => t, cos(PI/9) => u) |> expand |> simplify |> println

   R*(-20*t + 4*u*sqrt(19/2 - cos(2*pi/9)/2) + 18*sqrt(3)*u - 34*sin(2*pi/9) - 2*sqrt(19/2 - cos(2*pi/9)/2))/(160*t^2)

内側の正9角形の一辺の長さ L = 0.316228

その他のパラメータは以下の通り。

   外側の正9角形の外接円の半径 R = 1.4619;  外側の正9角形の一辺の長さ c = 1
   内側の正9角形の外接円の半径 r = 0.462294;  内側の正9角形の一辺の長さ L = 0.316228
   a = 1.23775;  x = -0.0218825;  y = 0.461776;  x0 = 1.11988;  y0 = 0.939693

function draw(c, more=false)
   pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   t = sind(20)
   t2 = sind(40)
   u = cosd(20)
   u2 = cosd(40)
   R = c/(2t)
   r = R/√10
   L = 2R*t/√10
   @printf("外側の正9角形の外接円の半径 R = %g;  外側の正9角形の一辺の長さ c = %g\n", R, c)
   @printf("内側の正9角形の外接円の半径 r = %g;  内側の正9角形の一辺の長さ L = %g\n", r, L)
   a = √10R*(sqrt(t^2 + 9) - t)/10
   x = R*(t^3*(72t^2 - 92) - 10t^2*sqrt(t^2 + 9) + 10t*(2 - u) + (2 - u)*sqrt(t^2 + 9))/(80t^3)
   y = R*(4u*sqrt(19/2 - u2/2) - 20t+ 18√3u - 34t2 - 2sqrt(19/2 - u2/2))/(160t^2)
   θ = atand(y, x)
   n = 9
   outerθ = 0:40:360
   outerx = @. R*cosd(outerθ)
   outery = @. R*sind(outerθ)
   innerθ = outerθ .+ θ
   innerx = @. r*cosd(innerθ)
   innery = @. r*sind(innerθ)
   @printf("a = %g;  x = %g;  y = %g;  x0 = %g;  y0 = %g\n", a, x, y, outerx[2], outery[2])
   plot()
   circle(0, 0, R)
   circle(0, 0, r, :gray90)
   plot!(outerx, outery, color=:blue, lw=0.5)
   for i in 1:n + 1
       segment(outerx[i], outery[i], innerx[i], innery[i], :green)
   end
   if more
       delta = (fontheight = (ylims()[2]- ylims()[1]) / 500 * 10 * 2) /3  # size[2] * fontsize * 2
       hline!([0], color=:black, lw=0.5)
       vline!([0], color=:black, lw=0.5)
       point(innerx[1], innery[1], "   A:(x,y)", :green, :left, :vcenter)
       point(outerx[2], outery[2], " B:(x0,y0)", :blue, :left, :vcenter)
       point(R, 0, " R:(R,0)", :blue, :left, :bottom, delta=delta/2)
   end
end;

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

PVアクセスランキング にほんブログ村

PVアクセスランキング にほんブログ村