裏 RjpWiki

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

算額(その1192)

2024年08月07日 | Julia

算額(その1192)

(15) 京都府夜久野町字額田 妙竜寺 明治20年(1887)
近畿数学史学会:近畿の算額「数学の絵馬を訪ねて」,平成4年5月16日 初版第一刷,大阪教育図書株式会社,大阪市.
キーワード:円12個,直線上

直線上に春円 2 個,夏円 1 個,秋円 1 個が載り,秋円の中に 8 個の冬円が内接している。春円,夏円の直径がそれぞれ 3 寸,2 寸のとき,冬円(秋円)の直径はいかほどか。

春円の半径と中心座標を r1, (x1, r1)
夏円の半径と中心座標を r2, (0, r2)
秋円の半径と中心座標を r3, (0, 2r2 + r3)
冬円の半径と中心座標を r4, (r3 - r4, 2r2 + r3)
とおき,以下の連立方程式を解く。

include("julia-source.txt");

using SymPy
@syms r1::positive, x1::positive,
     r2::positive, r3::positive, r4::positive
eq1 = (r3 - r4)*sind(Sym(45)/2) - r4
eq2 = x1^2 + (r1 - r2)^2 - (r1 + r2)^2
eq3 = x1^2 + (2r2 + r3 - r1)^2 - (r1 + r3)^2;
res = solve([eq1, eq2, eq3], (r3, r4, x1))[1]

   (r2^2/(r1 - r2), r2^2*sqrt(2 - sqrt(2))/(r1*sqrt(2 - sqrt(2)) + 2*r1 - 2*r2 - r2*sqrt(2 - sqrt(2))), 2*sqrt(r1)*sqrt(r2))

r4 は若干簡約化できる。

ans_r4 = res[2] |> factor
ans_r4 |> println

   r2^2*sqrt(2 - sqrt(2))/((r1 - r2)*(sqrt(2 - sqrt(2)) + 2))

春円,夏円の直径がそれぞれ 3 寸,2 寸のとき,冬円,秋円の直径は 1.10707461565662 寸,4 寸である。

2res[2](r1 => 3/2, r2 => 2/2).evalf() |> println
2res[1](r1 => 3/2, r2 => 2/2).evalf() |> println

   1.10707461565662
   4.00000000000000

function draw(r1, r2, more)
    pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   (r3, r4, x1) = (r2^2/(r1 - r2), r2^2*sqrt(2 - sqrt(2))/(r1 - r2)/(sqrt(2 - sqrt(2)) + 2), 2*sqrt(r1)*sqrt(r2))
   @printf("春円,夏円の直径が %g, %g のとき,冬円の直径は %g,秋円の直径は %g である。\n", 2r1, 2r2, 2r4, 2r3)
   plot()
   circle(0, 2r2 + r3, r3, :orange)
   for θ in 0:45:359
       (y, x) = (r3 - r4).*sincos(pi*θ/180)
       circle(x, 2r2 + r3 + y, r4, :blue)
   end
   circle2(x1, r1, r1, :green)
   circle(0, r2, r2, :red)
   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(x1, r1, "春円:r1,(x1,r1)", :green, :center, delta=-delta/2)
       point(0, r2, "夏円:r2,(0,r2)", :red, :center, delta=-delta/2)
       point(0, 2r2 + r3, "秋円:r3\n(0,2r2+r3)", :orange, :center, delta=-delta/2)
       point(r3 - r4, 2r2 + r3, "冬円:r4,(r3-r4,2r2+r3)", :blue, :left, delta=-delta/2, deltax=-5delta)
   end
end;

draw(3/2, 2/2, true)


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

コメントを投稿

Julia」カテゴリの最新記事