裏 RjpWiki

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

算額(その357)

2023年08月02日 | Julia

算額(その357)

山形県山形市南原町 熊野神社
山形算額勝負-湯殿山神社を目指せ-

https://www.sci.yamagata-u.ac.jp/wasan/pdf/20180711SSEP.pdf

(5) 大円の中に小円と正方形が入っている。正方形の一辺の長さが 6 寸,小円の直径が 3 寸のとき,大円の半径を求めよ。

大円の半径,中心座標を r, (0, 0)
小円の半径,中心座標を r1, (0, r - r1)
その他,下図のように正方形の一辺の長さの1/2 を a,原点から正方形の下辺までの距離を b とし,以下の連立方程式を解き,一般解を求める。

include("julia-source.txt");

using SymPy
@syms r, r1, a, b

eq1 = b^2 + a^2 - r^2
eq2 = (2a - b) - (r - 2r1)
res = solve([eq1, eq2], (r, b))

   1-element Vector{Tuple{Sym, Sym}}:
    ((5*a^2 + 8*a*r1 + 4*r1^2)/(4*(a + r1)), (a + 2*r1)*(3*a + 2*r1)/(4*(a + r1)))

大円の半径は (5*a^2 + 8*a*r1 + 4*r1^2)/(4*(a + r1)) である。

a, r1 に問にある数値を代入し,答え(数値解)を求める。

(a, r1) = (6/2, 3/2)
4*(a + r1) |> println
(5*a^2 + 8*a*r1 + 4*r1^2)/(4*(a + r1)) |> println
(a + 2*r1)*(3*a + 2*r1)/(4*(a + r1))   |> println

   18.0
   5.0
   4.0

大円の半径は 5 寸(直径は 10 寸)である。

using Plots

function draw(more)
    pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   (a, r1) = (6/2, 3/2)
   (r, b) = ((5*a^2 + 8*a*r1 + 4*r1^2)/(4*(a + r1)), (a + 2*r1)*(3*a + 2*r1)/(4*(a + r1)))
   @printf("大円の直径 = 2r = %g\n", 2r)
   plot()
   circle(0, 0, r, :blue)
   circle(0, r - r1, r1, :green)
   rect(-3, r - 2r1 - 2a, a, r - 2r1, :red)
   if more
       delta = (fontheight = (ylims()[2]- ylims()[1]) / 500 * 10 * 2) /3  # size[2] * fontsize * 2
       point(0, r - r1, " r-r1")
       point(a, 0, " a", :red)
       point(0, -b, " -b", :red)
       point(0, r - 2r1, " r - 2r1")
       point(0, 2a - b, "2a-b ", :red, :right)
       hline!([0], color=:black, lw=0.5)
       vline!([0], color=:black, lw=0.5)
   else
       plot!(showaxis=false)
   end
end;

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

算額(その356)

2023年08月02日 | Julia

算額(その356)

山形県山形市南原町 熊野神社
山形算額勝負-湯殿山神社を目指せ-

https://www.sci.yamagata-u.ac.jp/wasan/pdf/20180711SSEP.pdf

(3) 図のように三角形の中に大,中,小の正方形が入っている。中正方形,小正方形の一辺の長さがそれぞれ 2 寸,1 寸であるとき,大正方形の一辺の長さはいくつか。

図にある三角形は全て,∠BAC が θ の 直角三角形三角形と相似である。
一番小さな正方形の一辺の長さが BC のとき,C の座標が決まり,各点の座標が順に決まる。
BC, FG, JK は等比数列になり公比は sin(θ) + 1/cos(θ) である。
BC = 1 寸, FG = 2 寸ならば,sin(θ) + 1/cos(θ) = 2 となる θ は 0.725444020103262 である。
このとき,JK = 2FG = 4 である。

include("julia-source.txt");

using SymPy
@syms θ::positive, AB, BC, Cx, Cy
eq = sin(θ) + 1/cos(θ) - 2
solve(eq, θ)[1].evalf() |> println

   0.725444020103262

sin(0.725444020103262) + 1/cos(0.725444020103262)

   1.9999999999999998

draw(0.725444020103262)

   θ = 0.725444 = 41.5649度
   公比 = sin(θ) + 1/cos(θ) = 2
   size1 = 1;  size2 = 2;  size3 = 4

using Plots

function segment(xys)
   ax = []
   ay = []
   for xy in xys
       append!(ax, xy.x)
       append!(ay, xy.y)
   end
   plot!(ax, ay, color=:black, lw=0.5)
end;

struct Cord
   name
   x
   y
end;

function draw(θ)
    pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   (Sin, Cos, Tan) = (sin(θ), cos(θ), tan(θ))
   @printf("θ = %g = %g度\n公比 = sin(θ) + 1/cos(θ) = %g\n", θ, 180θ/pi, sin(θ) + 1/cos(θ))
   plot()
   size1 = 1
   AB = size1/Sin
   A = Cord("A", 0, 0)
   B = Cord("B", AB, 0)
   C = Cord("C", AB - size1*Sin, size1*Cos)
   D = Cord("D", C.x + size1*Cos, C.y + size1*Sin)
   E = Cord("E", B.x + size1*Cos, size1*Sin)
   F = Cord("F", E.x, 0)
   size2 = E.y + size1/Cos  # size1*Sin + size1/Cos
   G = Cord("G", E.x, size2)
   H = Cord("H", F.x + size2, 0)
   I = Cord("I", H.x, size2)
   J = Cord("J", I.x - size2*Sin^2, I.y + size2*Sin*Cos)
   K = Cord("K", H.x + size2*Tan, 0)
   size3 = size2*(Sin + 1/Cos)  # size2*Sin + size2/Cos
   L = Cord("L", J.x + size3*Cos, J.y + size3*Sin)
   M = Cord("M", K.x + size3*Cos, size3*Sin)
   N = Cord("N", M.x, 0)
   O = Cord("O", L.x + size3*Tan*Cos, L.y + size3*Tan*Sin)
   segment((C, B, E, D, A, F, G, D))
   segment((F, H, I, G, J, K, H))
   segment((O, N, K, M, L, O))
   segment(L.x, L.y, J.x, J.y)
   for p in (A, B, F, H, I, K, N)
       point(p.x, p.y, " " * p.name, :red, :left)
   end
   for p in (C, D, E, G, J, L, M, O)
       point(p.x, p.y, " " * p.name, :red, :left, :vcenter)
   end
   plot!(showaxis=false, xflip=true)
   @printf("size1 = %g;  size2 = %g;  size3 = %g\n", size1, size2, size3)
end;

draw(pi/6)
θ = 0.523599 = 30度
公比 = sin(θ) + 1/cos(θ) = 1.6547
size1 = 1; size2 = 1.6547; size3 = 2.73803

 

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

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

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