裏 RjpWiki

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

算額(その274)

2023年06月11日 | Julia

算額(その274)

中村信弥「改訂増補 長野県の算額」
http://www.wasan.jp/zoho/zoho.html
県内の算額(165)
長野県飯山市下木島 鳥出神社 弘化4年(1847)

大円と小円は同心円で,半径の差は小円の半径に等しい。3 個の小円の中心は大円の演習場にあり,小円は中遠に外接しかつ大円(中円)の弦にも接している。
小円の径が 4 寸,矢が 1 寸のとき,中円の径はいかほどか。

矢の長さを a とする。
中円の半径と中心座標を r2, (0, 0) とする。
中央と右の小円の半径と中心座標を r1, (0, r1 +r2), (x1, r2 - a + r1) とする。

r1, a を変数のまま以下の連立方程式を解く。

include("julia-source.txt");

using SymPy
@syms r1::positive, r2::positive, x1::positive, a::positive;

r1 = 2
a = 1
eq1 = x1^2 + (r2 - a + r1)^2 - (r1 + r2)^2
eq2 = x1^2 + a^2 - 4r1^2
res = solve([eq1, eq2], (r2, x1))

   1-element Vector{Tuple{Sym, Sym}}:
    (r1*(-a + 2*r1)/a, sqrt(-a + 2*r1)*sqrt(a + 2*r1))

2r2 が中円の直径なので 2*(r1*(-a + 2*r1)/a)

2res[1][1] |> simplify |> println

   2*r1*(-a + 2*r1)/a

2r1 は小円の直径なので,「小円の直径の二乗を矢で割って小円の直径を引く」と中円の直径が得られる。

r1 = 2; a = 1
2*(r1*(-a + 2*r1)/a)  # 中円径

   12.0

   r1 = 2.000000;  a = 1.000000;  r2 = 6.000000;  x1 = 3.872983

using Plots

function draw(more=false)
   pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   a = 1
   r1 = 4 // 2
   (r2, x1) = (r1*(-a + 2*r1)/a, sqrt(-a + 2*r1)*sqrt(a + 2*r1))
   @printf("r1 = %.6f;  a = %.6f;  r2 = %.6f;  x1 = %.6f\n", r1, a, r2, x1)
   plot()
   circle(0, 0, r2 + r1, :black)
   circle(0, 0, r2, :green)
   circle(0, r2 + r1, r1, :blue)
   circle(x1, r2 - a + r1, r1, :blue)
   circle(-x1, r2 - a + r1, r1, :blue)
   x = sqrt((r2 + r1)^2 - (r2 - a)^2)
   segment(-x, r2 - a, x, r2 - a)
   if more
       point(r2, 0, "r2 ", :green, :right)
       point(r2, 0, "中円 \n", :green, :right, :bottom)
       point(r2 + r1, 0, "r2+r1 ", :black, :right)
       point(r2 + r1, 0, "大円 \n", :black, :right, :bottom)
       point(x1, r2 - a + r1, "小円:r1\n(x1,r2-a+r1)", :blue, :left, :bottom)
       point(0, r2 - a, " r2-a", :black)
       point(0, r2, " r2", :green)
       point(0, r2 + r1, " r2+r1", :blue)
       vline!([0], color=:black, lw=0.5)
       hline!([0], color=:black, lw=0.5)
   else
       plot!(showaxis=false)
   end
end;

 

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

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

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