裏 RjpWiki

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

算額(その2119)

2024年09月27日 | Julia

算額(その2119)

八 武州足立郡桶川宿 不動堂 文化3年(1806)
埼玉県立図書館:埼玉県史料集 第二集『埼玉の算額』,昭和44年,誠美堂印刷所,埼玉県与野市.
キーワード:円8個
#Julia, #SymPy, #算額, #和算

大円 4 個が交わっている隙間に天円 2 個,等円 2 個を容れる。天円の直径が 15 寸のとき,等円の直径はいかほどか。

大円の半径と中心座標を r1, (0, r1/2), (√3r1/2, 0)
天円の半径と中心座標を r2, (0, 3r1/2 - r2)
等円の半径と中心座標を r3, (√3r1/2 + r1 - r3, 0)
とおき,以下の方程式を解く。
まず eq1 を解いて r1 を求め,解を eq2 に代入して解いて r3 を求める。
(連立して解くと SymPy では解を求めることができない)

include("julia-source.txt");

using SymPy
@syms r1::positive, r2::positive, r3::positive;
eq1 = (√Sym(3)*r1/2)^2 + (3r1/2 - r2)^2 - (r1 + r2)^2
eq2 = (√Sym(3)*r1/2 + r1 - r3)^2 + (r1/2)^2 - (r1 + r3)^2;

大円の半径 r1 は,天円の半径 r2 の 5/2 倍である。
天円の直径が 15 寸のとき,大円の直径は 15*5/2 = 57.5 である。

ans_r1 = solve(eq1, r1)[1]
ans_r1 |> println
ans_r1(r2 => 15/2) * 2 |> println

   5*r2/2
   37.5000000000000

等円の半径 r3 は,天円の半径 r2 の 5(1 + 3√3)/26 倍である。
天円の直径が 15 寸のとき,等円の直径は 15*5(1 + 3√3)/26 = 17.873516603961438 である。

eq12 = eq2(r1 => ans_r1)
ans_r3 = solve(eq12, r3)[1] |> factor
ans_r3 |> println
ans_r3(r2 => 15/2).evalf() * 2 |> println

   5*r2*(1 + 3*sqrt(3))/26
   17.8735166039614

「術」は以下のようになっており,簡約化すると同じ関係式になる。

@syms 天径, d
子 = √Sym(3) + 1
等円径 = 子/2(子 + 3)*5天径
等円径 |> println
等円径(天径 => 15).evalf() |> println

   5*天径*(1 + sqrt(3))/(2*sqrt(3) + 8)
   17.8735166039614

apart(等円径, d) |> simplify |> println

   5*天径/26 + 15*sqrt(3)*天径/26

function draw(r2, more=false)
   pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   r1 = 5r2/2
   r3 = 5r2*(1 + 3√3)/26
   @printf("天円の直径が %g のとき,等円の直径は %g,大円の直径は %g である。\n", 2r2, 2r3, 2r1)
   plot()
   circle2(√3r1/2, 0, r1)
   circle22(0, r1/2, r1)
   circle22(0, 3r1/2 - r2, r2, :green)
   circle2(√3r1/2 + r1 - r3, 0, r3, :blue)
   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, r1/2, " r1/2", :red, :left, :bottom, delta=delta/4)
       point(√3r1/2, 0, "√3r1/2 ", :red, :right, delta=-delta/2)
       point(0, 3r1/2 - r2, "天円:r2\n(0,3r1/2-r2)", :green, :center, delta=delta/2)
       point(√3r1/2 + r1 - r3, 0, "等円:r3\n(√3r1/2+r1-r3, 0)", :blue, :center, :bottom, delta=delta/2)
   end
end;

draw(15/2, true)


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

コメントを投稿

Julia」カテゴリの最新記事