裏 RjpWiki

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

算額(その610)

2024年01月04日 | Julia

算額(その610)

高山忠直編: 算法評論
国立国会図書館 デジタルコレクション

https://dl.ndl.go.jp/pid/3508431/1/10

外円内に弦を引き,等円を 4 個配置する。
外円の直径が与えられたとき等円の直径を求めよ。

外円の半径と中心座標を R, (0, 0)
等円の半径と中心座標を r, (0, R - r), (x, y); y = 3r - R
とおき,連立方程式を解く。

include("julia-source.txt");

using SymPy
@syms R::positive, r::positive, x::positive, y::negative
y = 2r - R + r
eq1 = x^2 + y^2 - (R - r)^2
eq2 = x^2 + (R - r - y)^2 - 4r^2
res = solve([eq1, eq2], (r, x));

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

   R*(3 - sqrt(5))/2
   R*sqrt(-22 + 10*sqrt(5))

等円の半径は外円の半径の (3 - √5)/2 倍である。
例えば,外円の直径が 987 のとき,等円の直径は 377.0004531038537 である。

987*(3 - √5)/2

   377.0004531038537

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

   等円の直径 = 754.001;  x = 592.759;  y = 144.001;  R = 987

function draw(more=false)
   pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   R = 987
   (r, x) = R .* ((3 - sqrt(5))/2, sqrt(-22 + 10*sqrt(5)))
   y = 2r - R + r
   @printf("等円の直径 = %g;  x = %g;  y = %g;  R = %g\n", 2r, x, y, R)
   plot()
   circle(0, 0, R)
   circle(0, R - r, r, :blue)
   circle(0, r - R, r, :blue)
   circle(x, y, r, :blue)
   circle(-x, y, r, :blue)
   x0 = sqrt(R^2 - (2r - R)^2)
   segment(-x0, 2r - R, x0, 2r - R, :magenta)
   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(0, R, " R", :red, :left, :bottom, delta=delta/2)
       point(0, R - r, " R-r", :blue, :left, :vcenter)
       point(0, r - R, " r-R", :blue, :left, :vcenter)
       point(0, 2r - R, " 2r-R", :blue, :left, :bottom, delta=delta/2)
       point(x, y, "等円:r,(x,y)", :blue, :center, :top, delta=-delta)
   end
end;


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

コメントを投稿

Julia」カテゴリの最新記事