裏 RjpWiki

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

算額(その68)

2022年12月21日 | Julia

算額(その68)

新潟県柏崎市 椎谷観音堂 寛政7年(1795)5月
http://www.wasan.jp/niigata/shiiyahukugen.png

外円の中に、弦と外円に接する甲円 1 個,乙円 2 個がある。外円の径が 5 寸であるとき,弦と甲円の径の差が最も大きくなるような乙円の径を求めよ。

答えは 1 寸

外円の半径を 5 とし,図のように記号を定め,方程式を解く。

弦(の 1/2)と r2 の差は以下である。

using SymPy
@syms r2::positive
gen = sqrt((5^2 - (5 - 2r2)^2)) - r2
gen |> println

   -r2 + sqrt(25 - (5 - 2*r2)^2)

これが最も大きくなるのは gen の導関数が 0 になるときの r2 である。

r2 = solve(diff(gen))[1]
println("r2 = $r2 = $(r2.evalf())")

   r2 = 5/2 - sqrt(5)/2 = 1.38196601125011

using Plots
plot(gen, color=:black, aspectratio=:none, ylims=(0, 3.5), size=(500, 300), label="")
xlabel!("y2")
ylabel!("gen")
vline!([r2], label="")



r2 = 5/2 - sqrt(5)/2 として,二本の方程式を立て,解く。

@syms x1, r1
r2 = 5//2 - sqrt(Sym(5))/2
eq1 = x1^2 +(5 - 2r2 + r1)^2 - (5 - r1)^2;
eq2 = x1^2 + (r2 - r1)^2 - (r2 + r1)^2;

solve([eq1, eq2], (x1, r1))

   2-element Vector{Tuple{Sym, Sym}}:
    (-sqrt(10 - 2*sqrt(5)), 1)
    (sqrt(10 - 2*sqrt(5)), 1)

2 組目の解が適切な解である。すなわち,乙円の径は 1 である
また,乙円の中心座標は,(sqrt(10 - 2*sqrt(5)), 1+sqrt(5)) である。

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; mark=true)
   mark && scatter!([x], [y], color=color, markerstrokewidth=0)
   annotate!(x, y, text(string, 10, position, color, vertical))
end;

function draw(more=false)
   pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   plot(ylims=(-0.2, 5.1))
   r2 = 5/2 - sqrt(5)/2
   x1, r1 = (sqrt(10 - 2*sqrt(5)), 1)
   gen = sqrt(5^2 - (5 - 2r2)^2)
   println("x1 = $x1;  r1 = $r1;  r2 = $r2")
   println("弦 = $gen;  差 = $(gen - r2)")
   circle(0, 0, 5)
   circle(0, 5-r2, r2, :blue)
   circle(x1, 5-2r2+r1, r1, :magenta)
   hline!([5-2r2])
   if more
       point(0, 5-r2, "5-r2 ", :blue, :right)
       point(0, 5-2r2, "5-2r2 ", :blue, :right)
       point(x1, r1+√5, "(x1,r1+√5))", :blue, :center)
       hline!([0], color=:black, lw=0.5)
       vline!([0], color=:black, lw=0.5)
   end
end;

   x1 = 2.3511410091698925;  r1 = 1;  r2 = 1.381966011250105
   弦 = 4.47213595499958;  差 = 3.0901699437494745

 


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

コメントを投稿

Julia」カテゴリの最新記事