裏 RjpWiki

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

算額(その1268)

2024年09月03日 | Julia

算額(その1268)

百三十三 群馬県高崎市山名町 八幡宮 明治18年(1885)
群馬県和算研究会:群馬の算額,上武印刷株式会社,高崎市,1987年3月31日.
キーワード:円3個,直角三角形

直角三角形の底辺に大円 1 個,等円 2 個が互いに接し合って載っている。直角三角形の直角を挟む二辺の短い方(鈎)が 2.8 寸,長い方(股)が 6.72 寸のとき,大円の直径はいかほどか。

鈎,股をそのまま「鈎」,「股」
大円の半径と中心座標を r1, (r1, r1)
等円の半径と中心座標を r2, (r2, r2), (x2, r2)
とおき,以下の連立方程式を解く。

include("julia-source.txt");

using SymPy
@syms 鈎::positive, 股::positive,
     r1::positive, r2::positive, x2::positive;
eq1 = 2(r1 - r2)^2 - (r1 + r2)^2
eq2 = x2 + r2 - 2r1
eq3 = dist2(0, 鈎, 股, 0, x2, r2, r2);
# res = solve([eq1, eq2, eq3], (r1, r2, x2))

たかが三元連立方程式なのに,Python では一度に解けないので,まず eq1, eq2 を解いて r2, x2 求める。

res = solve([eq1, eq2], (r2, x2))[1];
ans_r2 = res[1] |> simplify;
ans_r2 |> println
ans_x2 = res[2]
ans_x2 |> println;

   r1*(3 - 2*sqrt(2))
   r1*(-1 + 2*sqrt(2))

eq3 に r2,x2 を代入し,r1 を求める。

eq13 = eq3(r2 => ans_r2, x2 => ans_x2);
ans_r1 = solve(eq13, r1)[2]

ans_r1 |> println

   股*(-3*股 + 2*sqrt(2)*股 - 2*sqrt(2)*鈎 + 鈎 + sqrt(17 - 12*sqrt(2))*sqrt(股^2 + 鈎^2))/(2*(-8*sqrt(2)*股 + 11*股 - 4*sqrt(2)*鈎 + 4*鈎))

複雑な式になるが,鈎 =2.8, 股 = 6.72 を代入すると r1 = 5.00318003274053 が得られる。

2ans_r1(鈎 => 2.8, 股 => 6.72).evalf() |> println

   5.00318003274053

すべてのパラメータは以下のとおりである。

   鈎 = 2.8;  股 = 6.72;  r1 = 2.50159;  r2 = 0.429205;  x2 = 4.57398

function draw(鈎, 股, more)
    pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   r1 = 股*(-3*股 + 2*sqrt(2)*股 - 2*sqrt(2)*鈎 + 鈎 + (3 - 2*sqrt(2))*sqrt(股^2 + 鈎^2))/(2*(-8*sqrt(2)*股 + 11*股 - 4*sqrt(2)*鈎 + 4*鈎))
   r2 = r1*(3 - 2*sqrt(2))
   x2 = r1*(-1 + 2*sqrt(2))
   @printf("鈎,股が %g, %g のとき,大円の直径は %g である。\n", 鈎, 股, 2r1)
   @printf("鈎 = %g;  股 = %g;  r1 = %g;  r2 = %g;  x2 = %g\n", 鈎, 股, r1, r2, x2)
   plot([0, 股, 0, 0], [0, 0, 鈎, 0], color=:blue, lw=0.5)
   circle(r1, r1, r1)
   circle(x2, r2, r2, :green)
   circle(r2, r2, r2, :green)
   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(r1, r1, "大円:r1,(r1,r1)", :red, :center, delta=-delta/2)
       point(r2, r2, "等円:r2,(r2,r2)", :green, :left, :bottom, delta=delta, deltax=7delta)
       point(x2, r2, "r2,(x2,r2)", :green, :right, :bottom, delta=delta, deltax=-7delta)
       point(0, 鈎, "鈎 ", :blue, :right, :vcenter)
       point(股, 0, " 股", :blue, :left, delta=-delta/2)
       plot!(xlims=(-6delta, 股 + 5delta), ylims=(-5delta, 2r1 + delta))
   end
end;

draw(2.8, 6.72, true)

 


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

コメントを投稿

Julia」カテゴリの最新記事