裏 RjpWiki

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

算額(その1396)

2024年11月10日 | Julia

算額(その1396)

三四 武蔵国埼玉郡下忍村遍照院境内 金毘羅社(神楽堂) 天保11年(1840)
埼玉県立図書館:埼玉県史料集 第二集『埼玉の算額』,昭和44年,誠美堂印刷所,埼玉県与野市.
キーワード:円2個,半円,楕円,斜線2本
#Julia, #SymPy, #算額, #和算

半円内に 2 本の斜線を引き,隙間に等円 2 個と楕円 1 個を容れる。楕円は短径端で半円と接し,長径が最も長いものである。楕円の短軸の長さが 1 寸のとき,等円が最も大きくなるときの等円の直径はいかほどか。

2 斜線の交点座標を (0, y)
半円の半径と中心座標を R, (0, 0)
等円の半径と中心座標を r, (x, y)
楕円の長半径,短半径と中心座標を a, b, (0, R - b)
楕円と等円の接点座標を (x0, y0)
とおく。

算額(その1175)
https://blog.goo.ne.jp/r-de-r/e/a9c6b5f00eaa988e13a37370839e7050
に示したように,等円が最も大きくなるのは 2 斜線の交点座標の y が R/2 のときで,そのとき等円の半径 r は r = y/2 = R/4 である。

以下の連立方程式を解く。

include("julia-source.txt");
# julia-source.txt ソース https://blog.goo.ne.jp/r-de-r/e/ad3a427b84bb416c4f5b73089ae813cf

using SymPy
@syms a, b, R, r, y, x0, y0
R = 4r
a = sqrt(b*R)
eq1 = x0^2/a^2 + (y0 - R + b)^2/b^2 - 1
eq2 = -b^2*x0/(a^2*(y0 - R + b)) - 1//2
eq3 = y0/(R + x0) - 1//2;
res = solve([eq1, eq2, eq3], (r, x0, y0))[1]

   (5*b/4, 5*b/3, 10*b/3)

等円の半径 r は,楕円の短半径 b の 5/4 倍である。
楕円の短径が 1 寸のとき,等円の直径は 1.25 寸である。

なお,そのとき半円の直径は 2 寸,楕円の長径は √2 = 1.4142135623730951 寸である。

以下で,図を描くためのパラメータを求める。
等円の中心座標を (cx, cy); cy = y,斜線と半円の交点の x 座標 を x1 として,以下の連立方程式を解く。

@syms cx, x1
(r, x0, y0) = (5*b/4, 5*b/3, 10*b/3)
y = 2r
R = 4r
a = sqrt(b*R)
eq4 = sqrt(R^2 - x1^2)/(x1 + R) - 1//2
eq5 = cx^2 + y^2 - (R - r)^2;
solve([eq4, eq5], (cx, x1))[2]  # 1 of 4

   (5*sqrt(5)*b/4, 3*b)

function draw(b, more)
    pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   (r, x0, y0) = (5b/4, 5b/3, 10b/3)
   y = cy = 2r
   R = 4r
   a = sqrt(b*R)
   (cx, x1) = (5√5b/4, 3b)
   plot()
   circle(0, 0, R, :green, beginangle=0, endangle=180)
   ellipse(0, R - b, a, b, color=:red)
   segment(-R, 0, x1, sqrt(R^2 - x1^2), :magenta)
   segment(R, 0, -x1, sqrt(R^2 - x1^2), :magenta)
   circle2(cx, cy, r, :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(cx, cy, "等円:r,(cx,cy)", :blue, :center, delta=-delta)
       point(0, R - b, "楕円:a,b,(0,R-b)", :red, :center, delta=-delta)
       point(0, R, "R", :green, :center, :bottom, delta=delta)
       point(0, y, "y", :magenta, :center, :bottom, delta=delta)
   end  
end;

draw(1/2, true)


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

コメントを投稿

Julia」カテゴリの最新記事