裏 RjpWiki

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

算額(その270)

2023年06月08日 | Julia

算額(その270)

中村信弥「改訂増補 長野県の算額」
http://www.wasan.jp/zoho/zoho.html
県内の算額(260)
長野県下高井郡木島平村 天満宮 推定明治21年(1888)

直線の上に丁円,乙円,甲円,乙円の順に 4 円が外接している。この 4 円に外接する丙円がある。甲円,乙円の径がそれぞれ 2 寸,3 寸のとき,丁円の径を求めよ。
丁円の半径,中心座標を r0, (0, r0)
甲円の半径,中心座標を r1, (x1, r1)
乙円の半径,中心座標を r2, (x2, r2), (x3, r2), x3 = x1 + (x1 - x3) = 2x1 - x2
丙円の半径,中心座標を r4, (x1, 2r1 + r4)

include("julia-source.txt");

using SymPy
@syms r0::positive, r1::positive, r2::positive, r4::positive, x1::positive, x2::positive, x3::positive, y4::positive;

x2 = 2x1 - x3

x4 = x1
y4 = 2r1 + r4
eq1 = x3^2 + (r0 - r2)^2 - (r0 + r2)^2
eq2 = x1^2 + (r0 - y4)^2 - (r0 + r4)^2
eq3 = (x1 - x2)^2 + (r1 - r2)^2 - (r1 + r2)^2
eq4 = (x2 - x4)^2 + (r2 - y4)^2 - (r2 + r4)^2;

r1, r2 を変数として,r0, r4, x1, x3 を求める。

res = solve([eq1, eq2, eq3, eq4], (r0, r4, x1, x3))

   2-element Vector{NTuple{4, Sym}}:
    (r1*r2^2/(2*r1 - r2)^2, -r1^2/(r1 - r2), -4*r1^(3/2)*sqrt(r2)*sqrt(1/(4*r1^2 - 4*r1*r2 + r2^2)), -2*sqrt(r1)*r2^(3/2)*sqrt(1/(4*r1^2 - 4*r1*r2 + r2^2)))
    (r1*r2^2/(2*r1 - r2)^2, -r1^2/(r1 - r2), 4*r1^(3/2)*sqrt(r2)*sqrt(1/(4*r1^2 - 4*r1*r2 + r2^2)), 2*sqrt(r1)*r2^(3/2)*sqrt(1/(4*r1^2 - 4*r1*r2 + r2^2)))

二組の解が求まるが,実際の値を与えて検証すると,二番目の解が適切である。

   丁円: r0 = 18.000000;  丙円: r4 = 4.000000;  x1 = 19.595918;  x3 = 14.696938

(r1, r2) = (2, 3)
(r1*r2^2/(2*r1 - r2)^2, -r1^2/(r1 - r2), -4*r1^(3/2)*sqrt(r2)*sqrt(1/(4*r1^2 - 4*r1*r2 + r2^2)), -2*sqrt(r1)*r2^(3/2)*sqrt(1/(4*r1^2 - 4*r1*r2 + r2^2)))


   (18.0, 4.0, -19.595917942265427, -14.69693845669907)

(r1, r2) = (2, 3)
(r1*r2^2/(2*r1 - r2)^2, -r1^2/(r1 - r2), 4*r1^(3/2)*sqrt(r2)*sqrt(1/(4*r1^2 - 4*r1*r2 + r2^2)), 2*sqrt(r1)*r2^(3/2)*sqrt(1/(4*r1^2 - 4*r1*r2 + r2^2)))

   (18.0, 4.0, 19.595917942265427, 14.69693845669907)

二番目の解の数式表現を求める。

甲円,乙円の半径を引数として,丁円の半径を求めるプログラムを書く。

直径を与えれば直径を求める。

draw(2, 3, more=false

   丁円: r0 = 18.000000;  丙円: r4 = 4.000000;  x1 = 19.595918;  x3 = 14.696938

using Plots

function draw(r1, r2, more=false)
   pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   (r0, r4, x1, x3) = (
       r1*r2^2/(2*r1 - r2)^2,
       -r1^2/(r1 - r2),
       4*r1^(3/2)*sqrt(r2)*sqrt(1/(4*r1^2 - 4*r1*r2 + r2^2)),
       2*sqrt(r1)*r2^(3/2)*sqrt(1/(4*r1^2 - 4*r1*r2 + r2^2)))
   x2 = 2x1 - x3
   x4 = x1
   y4 = 2r1 + r4
   @printf("丁円: r0 = %.6f;  丙円: r4 = %.6f;  x1 = %.6f;  x3 = %.6f\n", r0, r4, x1, x3)
   plot()
   circle(0, r0, r0)
   circle(x1, r1, r1, :blue)
   circle(x3, r2, r2, :green)
   circle(x2, r2, r2, :green)
   circle(x4, y4, r4, :magenta)
   if more
       point(x1, r1, " 甲円:r1(x1,r1)", :blue)
       point(x2, r2, " 乙円:r2(x2,r2)", :green, :left, :bottom)
       point(x3, r2, "乙円:r2(x3,r2) ", :green, :right, :bottom)
       point(x4, y4, " 丙円:r4(x4,y4)", :magenta, :left, :bottom)
       point(0, r0, " 丁円:r0", :red)
       vline!([0], color=:black, lw=0.5)
       hline!([0], color=:black, lw=0.5, xlims=(-r0, x2 + 4r2))
   else
       plot!(showaxis=false)
   end
end;


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

コメントを投稿

Julia」カテゴリの最新記事