裏 RjpWiki

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

算額(その90)

2023年01月05日 | Julia

算額(その90)

千葉県君津市 神野寺 万延2(1861)年2月
http://www.wasan.jp/chiba/jinyaji1.html

3 種類の円が図のように配置されている。大円,中円の径(直径)が □ 寸,□ 寸のとき,小円の径を求めよ。

大円,中円の径が不鮮明で読み取れないので,それぞれの半径を r1 = 3, r2 = 2 とする(任意に設定できるわけではない)。
大円,中円の中心座標を (0, y1), (x2, r2)とする。

それぞれの円が外接していることに基づく方程式を解く。

using SymPy

@syms r3::positive, x2::positive, y1::positive;
r1 = 3
r2 = 2
eq1 = (x2 - r3)^2 + (r2 - r3)^2 - (r2 + r3)^2
eq2 = x2^2 + (y1 - r2)^2 - (r1 + r2)^2
eq3 = r3^2 + (y1 - r3)^2 - (r1 + r3)^2
solve([eq1, eq2, eq3], (r3, y1, x2))

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

最初のものが適解である。小円の半径は 8 - 4*sqrt(3) = 1.0717967697244912 になる。

using Plots

function circle(ox, oy, r, color=:red; beginangle=0, endangle=360)
 θ = beginangle:0.1:endangle
 x = r.*cosd.(θ)
 y = r.*sind.(θ)
 plot!(ox .+ x, oy .+ y, color=color, linewidth=0.5)
end;

function point(x, y, string="", color=:green, position=:left, vertical=:top; fontsize=10, mark=true)
  mark && scatter!([x], [y], color=color, markerstrokewidth=0)
  annotate!(x, y, text(string, fontsize, vertical, position, color))
end;

function draw(more=false)
   pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   (r3, y1, x2) = (8 - 4*sqrt(3), 5, 4)
   (r1, r2) = (3, 2)
   println("小円の半径は $(8 - 4*sqrt(3))")
   plot()
   circle(0, y1, r1, :green)
   circle(x2, r2, r2)
   circle(-x2, r2, r2)
   circle(r3, r3, r3, :blue)
   circle(-r3, r3, r3, :blue)
   hline!([0], color=:black, lw=0.5)
   if more
       vline!([0], color=:black, lw=0.5)
       point(0, y1, "y1 ", :green, :bottom, :right)
       point(r3, r3, "(r3,r3)", :blue, :top)
       point(x2, r2, "(x2,r2)", :red, :top)
   end
end;

   小円の半径は 1.0717967697244912


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

コメントを投稿

Julia」カテゴリの最新記事