裏 RjpWiki

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

算額(その984)

2024年05月21日 | Julia

算額(その984)

一八 大里郡岡部村岡 稲荷社 文化14年(1817)

埼玉県立図書館:埼玉県史料集 第二集『埼玉の算額』,昭和44年,誠美堂印刷所,埼玉県与野市.

外円の中に,甲円 1 個,乙円 2 個,丙円 2 個が入っている。外円,甲円,乙円の直径がそれぞれ 156 寸,52 寸,26 寸のとき,丙円の直径はいかほどか。

外円の半径と中心座標を R, (0, )
甲円の半径と中心座標を r1, (0, y1)
乙円の半径と中心座標を r2, (0, y2)
丙円の半径と中心座標を r3, (x3, y3)
とおいて,以下の連立方程式を解く。
注:丙円の中心は x 軸上にあるわけではない。y3 ≠ 0

include("julia-source.txt");

using SymPy
@syms R::positive, r1::positive, y1::negative,
     r2::positive, y2::positive,
     r3::positive, x3::positive, y3::negative
eq1 = x3^2 + (y1 - y3)^2 - (r3 - r1)^2
eq2 = x3^2 + (y2 - y3)^2 - (r3 - r2)^2
eq3 = x3^2 + (y3 - r2 + R)^2 - (r2 + r3)^2
eq4 = x3^2 + y3^2 - (R - r3)^2
eq5 = (y2 - y1) - (r1 + r2);
res = solve([eq1, eq2, eq3, eq4, eq5], (r3, y1, y2, x3, y3))[1];

println("r3: ", res[1])
println("y1: ", res[2])
println("y2: ", res[3])
println("x3: ", res[4])
println("y3: ", res[5])

   r3: (-R + r2)*(r1 + r2)*(-2*R*r1 - R*r2 + r1*r2)/((R + r1)*(R*r1 + r2^2))
   y1: -(-R + r1)*(-R + r1 + 2*r2)/(R + r1)
   y2: -(R^2 - 3*R*r1 - 3*R*r2 + r1*r2)/(R + r1)
   x3: 2*sqrt(R)*sqrt(r1)*sqrt(r2)*sqrt(-(-R + r2)*(-R + r1 + 2*r2)*(-2*R*r1 - R*r2 + r1*r2))*sqrt(r1 + r2)/((R + r1)*(R*r1 + r2^2))
   y3: (-R^3*r1 + R^2*r1^2 + 3*R^2*r1*r2 + R*r1^2*r2 + R*r1*r2^2 + R*r2^3 - r1^2*r2^2 - r1*r2^3)/(R^2*r1 + R*r1^2 + R*r2^2 + r1*r2^2)

外円,甲円,乙円の直径がそれぞれ 156 寸, 52 寸, 26 寸のとき,丙円の直径は 105 寸である。

その他のパラメータは以下のとおりである。

r1 = 26;  r2 = 13;  R = 78
r3 = 52.5;  y1 = -13;  y2 = 26;  x3 = 25.0998;  y3 = -4.5

function draw(more=false)
   pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   (R, r1, r2) = (156, 52, 26) ./ 2
   (r3, y1, y2, x3, y3) =  ((-R + r2)*(r1 + r2)*(-2*R*r1 - R*r2 + r1*r2)/((R + r1)*(R*r1 + r2^2)), -(-R + r1)*(-R + r1 + 2*r2)/(R + r1), -(R^2 - 3*R*r1 - 3*R*r2 + r1*r2)/(R + r1), 2*sqrt(R)*sqrt(r1)*sqrt(r2)*sqrt(-(-R + r2)*(-R + r1 + 2*r2)*(-2*R*r1 - R*r2 + r1*r2))*sqrt(r1 + r2)/((R + r1)*(R*r1 + r2^2)), (-R^3*r1 + R^2*r1^2 + 3*R^2*r1*r2 + R*r1^2*r2 + R*r1*r2^2 + R*r2^3 - r1^2*r2^2 - r1*r2^3)/(R^2*r1 + R*r1^2 + R*r2^2 + r1*r2^2))
   @printf("外円,甲円,乙円の直径がそれぞれ %g, %g, %g のとき,丙円の直径は %g である。\n", 2R, 2r1, 2r2, 2r3)
   @printf("r1 = %g;  r2 = %g;  R = %g\n", r1, r2, R)
   @printf("r3 = %g;  y1 = %g;  y2 = %g;  x3 = %g;  y3 = %g\n", r3, y1, y2, x3, y3)
   plot()
   circle(0, 0, R, :green)
   circle(0, y1, r1)
   circle(0, y2, r2, :blue)
   circle(0, r2 - R, r2, :blue)
   circle2(x3, y3, r3, :magenta)
   if more        
       delta = (fontheight = (ylims()[2]- ylims()[1]) / 500 * 10 * 2) /3  # size[2] * fontsize * 2
       hline!([0], color=:gray80, lw=0.5)
       vline!([0], color=:gray80, lw=0.5)
       point(0, y1, "甲円:r1\n(0,y1)", :brown, :center, delta=-delta/2)
       point(0, y2, "乙円:r2\n(0,y2)", :blue, :center, delta=-delta/2)
       point(0, r2 - R, "乙円:r2\n(0,r2-R)", :blue, :center, :bottom, delta=delta/2)
       point(x3, y3, " 丙円:r3,(x3,y3)", :blue, :left, :vcenter)
       point(R, 0, " R", :green, :left, :bottom, delta=delta/2)
   end
end;


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

コメントを投稿

Julia」カテゴリの最新記事