裏 RjpWiki

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

算額(その1158)

2024年07月19日 | Julia

算額(その1158)

十七 大里郡岡部村岡 稲荷社 文化13年(1816)
埼玉県立図書館:埼玉県史料集 第二集『埼玉の算額』,昭和44年,誠美堂印刷所,埼玉県与野市.
キーワード:円10個,外円,直角三角形

外円の中に直角三角形,甲円,乙円,丙円を 1 個ずつ,丁円,戊円,己円を 2 個ずつ容れる。丁円,戊円の直径がそれぞれ 4 寸 3 寸のとき,己円の直径はいかほどか。

算額(その589)を一段階複雑にしたものである。

直角三角形の斜辺は外円の直径である(中心を通る)。
外円の半径と中心座標を R, (0, 0)
線分 AB, CA, CB の長さを AB,  CA, CB とする。
甲円の半径と中心座標を r1, (x1, y1)
乙円の半径と中心座標を r2, (0, r2 - R)
丙円の半径と中心座標を r3, (r3 - R, 0)
丁円の半径と中心座標を r4, (x41, y41), (x42, y42)
戊円の半径と中心座標を r5, (x5, -OB - r5)
己円の半径と中心座標を r6, (-OA/2 - r6, y6)
とおき,以下の連立方程式を解く。
まず eq1, eq2, eq3, eq4 を解いて,r6, R, CA, CB を求める。
eq1, eq2, eq3 は「算法助術」の公式29 である。

include("julia-source.txt")

using SymPy

@syms AB::positive, CA::positive, CB::positive,
     R::positive, r1::positive, r2::positive, r3::positive,
     r4::positive, r5::positive, r6::positive
AB = 2R
eq1 = AB^2 - 16R*r4
eq2 = CA^2 - 16R*r5
eq3 = CB^2 - 16R*r6
eq4 = CA^2 + CB^2 - AB^2
(ans_r6, ans_R, ans_CA, ans_CB) = solve([eq1, eq2, eq3, eq4], (r6, R, CA, CB))[1]

   (r4 - r5, 4*r4, 8*sqrt(r4)*sqrt(r5), 8*sqrt(r4)*sqrt(r4 - r5))

己円の半径 r6 は,丁円の半径 r4 から戊円の半径 r5 を引いたものである。
丁円,戊円の直径がそれぞれ 4 寸 3 寸のとき,己円の直径は 1 寸である。

算額の答えはここまででよいが,図を描くために残りのパラメータをすべて求める。

---

乙円の半径はすぐに求まり,次いで戊円の中心座標 x5 も求まる。

@syms x5
ans_r2 = (ans_R - ans_CB/2)/2
eq5 = x5^2 + (r2 - r5)^2 - (r2 + r5)^2
ans_x5 = solve(eq5, x5)[2]

ans_x5 |> println

   2*sqrt(r2)*sqrt(r5)

同様にして,丙円の半径,己円の中心座標 y6 も求まる。

@syms y6
r3 = (ans_R - ans_CA/2)/2 
eq6 = (r3 - r6)^2 + y6^2 - (r3 + r6)^2
ans_y6 = solve(eq6, y6)[2]
ans_y6 |> println

   2*sqrt(2)*sqrt(r6)*sqrt(-sqrt(r4)*sqrt(r5) + r4)

甲円と丁円のパラメータについては,直角三角形の斜辺を水平にした場合について求め,実際の角度だけ座標を回転させて図を描く。

@syms x4
r1 = ans_R/2
eq7 = x4^2 + r4^2 - (ans_R - r4)^2
ans_x4 = solve(eq7, x4)[2]
ans_x4 |> println

   2*sqrt(2)*r4

function draw(r4, r5, more=false)
    pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
  (r6, R, CA, CB) = (r4 - r5, 4*r4, 8*sqrt(r4)*sqrt(r5), 8*sqrt(r4)*sqrt(r4 - r5))
   AB = sqrt(CA^2 + CB^2)
   r2 = (R - CB/2)/2
   x5 = 2*sqrt(r2)*sqrt(r5)
   r3 = (R - CA/2)/2 
   y6 = 2*sqrt(2)*sqrt(r6)*sqrt(-sqrt(r4)*sqrt(r5) + r4)
   r1 = R/2
   (x1, y1) = transform(0, r1, deg=-atand(CB/CA))
   x4 = 2√2r4
   (x41, y41) = transform(x4, r4, deg=-atand(CB/CA))
   (x42, y42) = transform(-x4, r4, deg=-atand(CB/CA))
   @printf("丁円,戊円の直径が %g, %g のとき,己円の直径は %g である。\n", 2r4, 2r5, 2r6)
   @printf("r4 = %g;  r5 = %g;  r6 = %g;  R = %g;  CA = %g;  CB = %g\n", r4, r5, r6, R, CA, CB)
   plot([-CA/2, CA/2, -CA/2, -CA/2], [-CB/2, -CB/2, CB/2, -CB/2], color=:green, lw=0.5)
   circle(0, 0, R, :orange)
   circle(0, r2 - R, r2, :blue, lw=2)
   circle2(x5, -CB/2 - r5, r5, :blue)
   circle(r3 - R, 0, r3, :magenta, lw=2)
   circle22(-CA/2 - r6, y6, r6, :magenta)
   circle(x1, y1, r1, lw=2)
   circle(x41, y41, r4)
   circle(x42, y42, r4)
   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, R, "R", :orange, :center, :bottom, delta=delta/2)
       point(R, 0, " R", :orange, :left, :bottom, delta=delta/2)
       point(x1, y1, "甲円:r1,(x1,y1)", :red, :center, delta=-delta/2)
       point(x41, y41, "丁円:r4\n(x41,y41)", :red, :center, delta=-delta/2)
       point(x42, y42, "丁円:r4\n(x42,y42)", :red, :center, delta=-delta/2)
       point(0, r2 - R, "乙円:r2\n(0,r2-R)", :blue, :center, :bottom, delta=delta/2)
       point(x5, -CB/2 - r5, "戊円:r5\n(x5,-CB/2-r5)", :blue, :center, :bottom, delta=delta/2)
       point(r3 - R, 0, "   丙円:r3,(r3-R,0)", :magenta, :left, :vcenter)
       point(-CA/2 - r6, y6, "   己円:r6,(-CA/2-r6,y6)", :magenta, :left, :vcenter)
       point(-CA/2, -CB/2, "C ", :green, :right, :vcenter)
       point(CA/2, -CB/2, " A", :green, :left, :vcenter)
       point(-CA/2, CB/2, "B ", :green, :right, :vcenter)
   end
end;


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

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。

Julia」カテゴリの最新記事