裏 RjpWiki

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

算額(その1252)

2024年08月30日 | Julia

算額(その1252)

七十四 群馬県甘楽郡妙義町菅原 菅原神社 嘉永4年(1851)
群馬県和算研究会:群馬の算額,上武印刷株式会社,高崎市,1987年3月31日.
キーワード:円11個

5 個の大円が交差する隙間に 6 個の小円を容れる。大円の直径が 5 寸のとき,小円の直径はいかほどか。



大円の半径と中心座標を r1, (0, r1 + r2)
小円の半径と中心座標を r2, (0, 0), (x2, y2); y2 = x2*tand(54)
とおき,以下の連立方程式を解く。

一度に解くと r2 を表す式がとてつもなく複雑になるので,まず eq2 から x2 を求め,その解を eq1 に代入して r2 を求める。

include("julia-source.txt");

using SymPy
@syms r1::positive, r2::positive, x2::positive, y2::positive;
y2 = x2*tand(Sym(54))
eq1 = x2^2 + (r1 + r2 - y2)^2 - (r1 - r2)^2
eq2 = x2 - (r1 + r2)*cosd(Sym(18))/2;

ans_x2 = solve(eq2, x2)[1];
eq11 = eq1(x2 => ans_x2);

@syms d
ans_r2 = solve(eq11, r2)[1]
ans_r2 = solve(eq11, r2)[1]/r1 |> x -> apart(x, d)*r1 |> simplify
ans_r2 |> println
(ans_r2.evalf()) |> println
ans_r2(r1 => 5/2).evalf() |> println

   r1*(-2*sqrt(10*sqrt(5) + 50) - 4*sqrt(5) + 11 + 4*sqrt(2*sqrt(5) + 10))
   0.259616183682498*r1
   0.649040459206249

小円の半径 r2 は,大円の半径 r1 の (-2*sqrt(10*sqrt(5) + 50) - 4*sqrt(5) + 11 + 4*sqrt(2*sqrt(5) + 10)) = 0.259616183682498 倍である。
大円の直径が 5 寸のとき,小円の直径は 1.29808091841249 寸である。

ans_x2 = ans_x2(r2 => ans_r2) |> simplify
ans_x2 |> println
ans_x2.evalf() |> println
ans_x2(r1 => 5/2).evalf() |> println

   r1*(-sqrt(10*sqrt(5) + 50) - 3*sqrt(5) + 5 + 3*sqrt(2*sqrt(5) + 10))/2
   0.598983089761036*r1
   1.49745772440259

大円の直径が 5 寸のとき,小円の半径の中心座標は (3.743644311006475 寸, 5.152684346344076 寸) である。

1.49745772440259*5/2, 1.49745772440259*5/2*tand(54)

   (3.743644311006475, 5.152684346344076)

function draw(r1, more=false)
   pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   r2 = r1*(11 + 4*sqrt(2√5 + 10) - 2sqrt(10√5 + 50) - 4√5)
   x2 = r1*( 5 + 3*sqrt(2√5 + 10) -  sqrt(10√5 + 50) - 3√5)/2
   y2 = x2*tand(54)
   @printf("大円の直径が %g のとき,小円の直径は %g である。\n", 2r1, 2r2)
   plot()
   rotate(0, r1 + r2, r1, angle=72)
   rotate(x2, y2, r2, :blue, angle=72)
   circle(0, 0, r2, :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(x2, y2, " 小円:r2,(x1,y2)", :blue, :left, :vcenter)
       point(0, r1 + r2, "大円:r1,(0,r1+r2)", :red, :center, :bottom, delta=delta/2)
   end
end;

draw(5/2, true)


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

コメントを投稿

Julia」カテゴリの最新記事