裏 RjpWiki

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

算額(その293)

2023年06月21日 | Julia

算額(その293)

中村信弥「算額への招待 追補1」
http://www.wasan.jp/syotai/syotai.html
長野県飯山市滝澤家所蔵
http://www.wasan.jp/nagano/takizawa.html

長方形内に 3 個の円が内接している。円の直径が 5 寸のとき,長方形の短辺の長さを求めよ。

問では3個の円について述べており,右上,左上の2個の円についての記述はない。意図は良くわからないがここではこの円についても半径を求めておく。

長方形の短辺の長さを y とする。
半径,中心座標を以下のように決める。
円  r1, (r1, r1), (0, y - r1)
小円 r2, (r2, y - r2)

以下の連立方程式を解く。

include("julia-source.txt");

using SymPy

@syms r1::positive, r2::positive, y::positive;

eq1 = r1^2 + (y - 2r1)^2 - 4r1^2
eq2 = (2r1 - r2)^2 + (r1 - r2)^2 - (r1 + r2)^2
res = solve(eq1, y)
res |> println

   Sym[r1*(2 - sqrt(3)), r1*(sqrt(3) + 2)]

解が 2 つ求まるが,r1*(sqrt(3) + 2) が適解である。
すなわち短辺の長さは 5/2 * (sqrt(3) + 2) = 9.330127018922193 寸である。

5/2 * (sqrt(3) + 2)

   9.330127018922193

res2 = solve([eq1, eq2], (y, r2))

   4-element Vector{Tuple{Sym, Sym}}:
    (r1*(2 - sqrt(3)), 2*r1*(2 - sqrt(3)))
    (r1*(2 - sqrt(3)), 2*r1*(sqrt(3) + 2))
    (r1*(sqrt(3) + 2), 2*r1*(2 - sqrt(3)))
    (r1*(sqrt(3) + 2), 2*r1*(sqrt(3) + 2))

三番目の組が適解である。

   y = 9.33013;  r2 = 1.33975

小円の半径は 2*r1*(2 - sqrt(3)) = 1.33975 である。

using Plots

function draw(more=false)
   pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   r1 = 5 / 2
   (y, r2) = (r1*(sqrt(3) + 2), 2*r1*(2 - sqrt(3)))
   @printf("y = %.5f;  r2 = %.5f\n", y, r2)
   plot([0, 4r1, 4r1, 0, 0], [0, 0, y, y, 0], color=:black, lw=0.5)
   circle(r1, r1, r1)
   circle(3r1, r1, r1)
   circle(2r1, y - r1, r1)
   circle(r2, y - r2, r2, :blue)
   circle(4r1 - r2, y - r2, r2, :blue)
   if more
       point(r1, r1, "(r1,r1)", :red)
       point(3r1, r1, "(3r1,r1)", :red)
       point(2r1, y - r1, "(0,y-r1)", :red)
       point(r2, y - r2, "(r2,y-r2)", :blue, :center)
       point(4r1-r2, y - r2, "(4r1-r2,y-r2)", :blue, :center)
       point(0, y, " y")
       point(4r1, 0, "4r1 ", :green, :right, :bottom)
       vline!([0], color=:black, lw=0.5)
       hline!([0], color=:black, lw=0.5)
   else
       plot!(showaxis=false)
   end
end;

 


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

コメントを投稿

Julia」カテゴリの最新記事