裏 RjpWiki

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

算額(その1185)

2024年08月05日 | Julia

算額(その1185)

(10) 京都市中京区三条大宮西二筋目下ル 武信稲荷神社 嘉永6年(1853)
近畿数学史学会:近畿の算額「数学の絵馬を訪ねて」,平成4年5月16日 初版第一刷,大阪教育図書株式会社,大阪市.
キーワード:円4個,正方形,等脚台形

正方形内に,水平線・斜線2本(等脚台形),日円 1 個,月円 1 個,星円 2 個をいれる。日円,月円の直径が 1 寸,4 寸のとき,星円の直径はいかほどか。

正方形の一辺の長さを 2a; 2a = 2r1 + 2r2
日円の半径と中心座標を r1, (0, 2r2 + r1)
月円の半径と中心座標を r2, (0, r2)
星円の半径と中心座標を r3, (a - r3, 2r2 - r3)
とおき,以下の連立方程式を解く。

include("julia-source.txt");

using SymPy
@syms a::positive, b::positive, r1::positive, r2::positive, r3::positive
a = r1 + r2
eq1 = (a - b) + 2r2 - sqrt((a - b)^2 + 4r2^2) - 2r3
eq2 = dist2(a, 0, b, 2r2, 0, r2, r2)
res = solve([eq1, eq2], (r3, b))[1]

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

res[1]

「術」は,「日円と月円の直径の積を,日円と月円の直径の和で割る」と実に簡潔である。
(1*4)/(1 + 4) = 4/5 = 0.8

sqrt(...) は,r1^2 + 2*r1*r2 + 2*r2^2 と簡約化できるので,それを代入して,simplify すれば,術と同じ式になる。

sqrt(4*r2^2*(r1 + r2)^2 + (r2^2 - (r1 + r2)^2)^2) |> factor |> println

   r1^2 + 2*r1*r2 + 2*r2^2

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

日円,月円の直径が 1 寸,4 寸のとき,星円の直径は 1*4/(1 + 4) = 0.8 である。

function draw(r1, r2, more)
    pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   (r3, b) = ((r1^2 + 4*r1*r2 - r1*sqrt((4*r2^2*(r1 + r2)^2 + (r2^2 - (r1 + r2)^2)^2)/(r1 + r2)^2) + 2*r2^2 - r2*sqrt((4*r2^2*(r1 + r2)^2 + (r2^2 - (r1 + r2)^2)^2)/(r1 + r2)^2))/(2*(r1 + r2)), r2^2/(r1 + r2))
   a = r1 + r2
   @printf("日円,月円の直径が %g, %g のとき,星円の直径は %g である。\n", 2r1, 2r2, 2r3)
   @printf("r1 = %g;  r2 = %g;  r3 = %g;  2a = %g, b = %g\n", r1, r2, r3, 2a, b)
   plot([a, a, -a, -a, a], [0, 2a, 2a, 0, 0], color=:green, lw=0.5)
   circle(0, 2a - r1, r1)
   circle(0, r2, r2, :blue)
   circle2(a - r3, 2a - 2r1 - r3, r3, :magenta)
   segment(-a, 2a - 2r1, a, 2a - 2r1, :orange)
   segment(a, 0, b, 2a - 2r1, :orange)
   segment(-a, 0, -b, 2a - 2r1, :orange)
   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, 2a - r1, "日円:r1\n(0,2a-r1)", :red, :center, delta=-delta/2)
       point(0, r2, "月円:r1,(0,r2)", :blue, :center, delta=-delta/2)
       point(a - r3, 2r2 - r3, "星円:r3,(a-r3,2r2-r3) ", :magenta, :right, :vcenter)
       point(b, 2r2, "(b,2r2)", :black, :center, :bottom, delta=delta/2)
   end
end;

draw(1/2, 4/2, true)


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

コメントを投稿

Julia」カテゴリの最新記事