裏 RjpWiki

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

算額(その380)

2023年08月10日 | Julia

算額(その380)

東京都八王子市片倉町 片倉・住吉神社 嘉永4年(1851)
http://www.wasan.jp/tokyo/sumiyosi.html
鮮明な写真があります
https://utrblog.exblog.jp/10465003/
解説があります
http://tk2-230-24951.vs.sakura.ne.jp/sangaku/sangaku_kai.pdf

問題

正三角形内に,大円 1 個と小円 2 個がある。正三角形の一辺の長さと,大円の直径が与えられているとき,小円の直径を求めよ。

正三角形の一辺の長さを a
小円の半径と中心座標を r1, (r1, x1)
大円の半径と中心座標を r2, (0, y2)
として,以下の連立方程式を解く。

include("julia-source.txt");

using SymPy

@syms a::positive, r1::positive, x1::positive, r2::positive,y2::positive;

eq1 = (sqrt(Sym(3))a/2 - y2)/2 - r2;
eq2 = r1/(a/2 - x1) - 1/sqrt(Sym(3));
eq3 = x1^2 + (y2 - r1)^2 - (r1 + r2)^2;

res = solve([eq1, eq2, eq3], (r1, x1, y2))

   2-element Vector{Tuple{Sym, Sym, Sym}}:
    (sqrt(3)*a/3 - 2*sqrt(r2)*sqrt(sqrt(3)*a - 2*r2)/3 - r2/3, -a/2 + 2*sqrt(3)*sqrt(r2)*sqrt(sqrt(3)*a - 2*r2)/3 + sqrt(3)*r2/3, sqrt(3)*a/2 - 2*r2)
    (sqrt(3)*a/3 + 2*sqrt(r2)*sqrt(sqrt(3)*a - 2*r2)/3 - r2/3, -a/2 - 2*sqrt(3)*sqrt(r2)*sqrt(sqrt(3)*a - 2*r2)/3 + sqrt(3)*r2/3, sqrt(3)*a/2 - 2*r2)

最初の組のものが適解である。

res[1][1] |> factor |> println
res[1][2] |> factor |> println
res[1][3] |> factor |> println

   -(-sqrt(3)*a + 2*sqrt(r2)*sqrt(sqrt(3)*a - 2*r2) + r2)/3
   (-3*a + 4*sqrt(3)*sqrt(r2)*sqrt(sqrt(3)*a - 2*r2) + 2*sqrt(3)*r2)/6
   -(-sqrt(3)*a + 4*r2)/2

   r1 = 0.124024;  a = 1;  r2 = 0.25;  x1 = 0.285184;  y2 = 0.366025
   小円の直径 = 2r1 = 0.248049

using Plots

function draw(a, r2, more)
   pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   (r1, x1, y2) = (
       (√3a - 2√r2√(√3a - 2r2) - r2)/3,
       (4√3√r2√(√3a - 2r2) + 2√3r2 - 3a)/6,
       √3a/2 - 2r2
       )
   @printf("r1 = %g;  a = %g;  r2 = %g;  x1 = %g;  y2 = %g\n", r1, a, r2, x1, y2)
   @printf("小円の直径 = 2r1 = %g\n", 2r1)
   plot([-a/2, a/2, 0, -a/2], [0, 0, sqrt(3)a/2, 0], color=:black, linewidth=0.25)
   circle(0, y2, r2)
   circle(x1, r1, r1, :green)
   circle(-x1, r1, r1, :green)
   if more == true
       delta = (fontheight = (ylims()[2]- ylims()[1]) / 500 * 10 * 2) /3  # size[2] * fontsize * 2
       point(0, √3a/2, " √3a/2", :black, :left, :vcenter)
       point(a/2, 0, " a/2", :black, :left, :bottom)
       point(0, y2, " 大円:r2,(0,y2)", :red, :left, :vcenter)
       point(x1, r1, "小円:r1,(x1,r1)", :green, :center, delta=-delta/2)
       hline!([0], color=:black, lw=0.5)
       vline!([0], color=:black, lw=0.5)
   else
       plot!(showaxis=false)
   end
end;


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

コメントを投稿

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

Julia」カテゴリの最新記事