裏 RjpWiki

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

算額(その926)

2024年05月07日 | Julia

算額(その926)

群馬県安中市鷺宮 咲前神社 明治20年(1887)
「算額」第三集 全国調査,香川県算額研究会

大円に内接する正五角形と,外円に内接すると同時に隣同士外接する 10 個の等円がある。大円の直径が 17 寸のとき,正五角形の一辺の長さと等円の直径を求めよ。

問題を一般化し,正 n 角形を考える。
図は,正六角形の場合で,外円の直径が 36 寸 のとき,正六角形の一辺の長さは 9 寸,等円の直径は 7.40177 寸である。

大円の半径を R,正 n 角形の一辺の長さを p,等円の半径を r とする。

include("julia-source.txt");

using SymPy
@syms R::positive, r::positive, p::positive,
     n::integer

eq_p = R*sind(Sym(180)/n) - p
eq_r = (R - r)sind(Sym(90)/n) - r
p = solve(eq_p, p)[1]
r = solve(eq_r, r)[1]
(p, r)

   (R*sin(pi/n), R*sin(pi/(2*n))/(sin(pi/(2*n)) + 1))

p, r は R と n により決まるので,以下のような関数を定義しておけばよい。
R として大円の直径を与えれば,正 n 角形の一辺の長さと等円の直径を返す。
R として大円の半径を与えれば,正 n 角形の一辺の長さの 1/2 と等円の半径を返す。

func(R, n) = (R*sin(pi/n), R*sin(pi/(2*n))/(sin(pi/(2*n)) + 1));

大円の直径が 17 のとき,正五角形の一辺の長さは 9.992349288972044 寸,等円の直径は 4.013155617496424寸 である。

func(17, 5)

   (9.992349288972044, 4.013155617496424)

function draw(more=false)
   pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   (R, n) = (18, 6)
   (p, r) = func(R, n)
   @printf("外円の直径が %g 寸 のとき,正%i角形の一辺の長さは %g 寸,等円の直径は %g 寸である。\n", 2R, n, p, 2r)
   plot()
   circle(0, 0, R, :blue)
   θ = range(90, 450, length=n + 1)
   x = @. R*cosd(θ)
   y = @. R*sind(θ)
   for i in 1:n
       segment(x[i], y[i], x[i + 1], y[i + 1], :green)
   end
   rotate((R - r)*cosd(90 + 90/n), (R - r)*sind(90 + 90/n), r, angle=180/n)
   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, R, " R", :blue, :left, :bottom, delta=delta/2)
   end
end;


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

コメントを投稿

Julia」カテゴリの最新記事