裏 RjpWiki

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

算額(その66)

2022年12月17日 | Julia

算額(その66)

東京都中央区茅場町 薬師堂 寛政元年(1789)6月
http://www.wasan.jp/tokyo/yakusi.html

福島県白河市鹿島 鹿島神社
http://www.wasan.jp/fukusima/kashima1.html
に,寛政3年(1791)に奉納されたものの復元算額の中に同じ問題がある。

中村信弥「改訂増補 長野県の算額」
http://www.wasan.jp/zoho/zoho.html
県内の算額2(147)
長野県長野市鬼無里 松厳寺 天保10年(1839)
にもある。

甲円,乙円の径がそれぞれ 69 寸,23 寸である。外円の径を求めよ。

図のように記号を定め,方程式を解く。

注:外円の中心は乙円の円周上にあるのではない。

using SymPy
@syms y::negative, y1::negative, y2::negative, R::positive;
r = 23
eq0 = y2 - y1 - r*sqrt(Sym(3));
eq1 = 4r^2 + y2^2 - 16r^2  # 甲円と乙円2が外接する
eq2 = r^2 + (y - y1)^2 - (R - r)^2  # 外円と乙円1が内接する
eq3 = 4r^2 + y^2 - (R - 3r)^2;  # 外円と甲円が内接する
res = solve([eq0, eq1, eq2, eq3], (y, y1, y2, R))

   1-element Vector{NTuple{4, Sym}}:
    (-14*sqrt(3), -69*sqrt(3), -46*sqrt(3), 121)

R は 121 となった。

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()
   r = 23
   (y, y1, y2, R) = (-14*sqrt(3), -69*sqrt(3), -46*sqrt(3), 121)
   println("R = $R;  y = $y, y1 = $y1;  y2 = $y2")
   circle(0, y, R)
   circle(2r, 0, 3r, :green)
   circle(-2r, 0, 3r, :green)
   circle(0, 0, r, :blue)
   circle(0, y2, r, :blue)
   circle(r, y1, r, :blue)
   circle(-r, y1, r, :blue)
   if more
       point(0, 0, "0 ", :blue, :right)
       point(r, 0, "r ", :blue, :right)
       point(0, y, "外円の中心 y", :red, :center)
       point(2r, 0, "2r ", :green, :right)
       point(5r, 0, "5r ", :green, :right)
       point(r, y1, "(r,y1)", :blue, :center)
       point(0, y2, "y2 ", :blue, :right)
       hline!([0], color=:black, lw=0.5)
       vline!([0], color=:black, lw=0.5)
       point(25, -80, "小円2", :blue, mark=false)
       point(43, -100, "小円1", :blue, mark=false)
   end
end;

   R = 121;  y = -24.24871130596428, y1 = -119.51150572225252;  y2 = -79.67433714816835

 


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

コメントを投稿

Julia」カテゴリの最新記事