裏 RjpWiki

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

算額(その449)

2023年10月02日 | Julia

算額(その449)

松山市南柳井町 中村正教 昭和12年9月

数学史研究,通巻 186 号,2005年7月〜9月
http://www.wasan.jp/sugakusipdf/186.pdf

大円の中に 4 個の小円が入っている。図の黒色部分の面積(黒積)が与えられたとき,大円の半径を求めよ。

小円の半径を r とする(大円の半径は 2r である)。

図形のうち,赤の斜線で区切られた全体の 1/8 をみる。
黒積は甲と乙の面積の和の 8 倍である。乙と丙は相似なので甲と丙の面積の和を求める。甲と丙の面積の和は,大円の面積 π(2r)^2 の 1/8 から乙と丁の面積を引いたものである。乙と丁の面積の和は 2r * r / 2 = r^2 である。
なお,甲と乙の面積を別々に求めると両者は等しいことがわかる。

include("julia-source.txt")

using SymPy

@syms r::positive, 黒積::positive;

eq = 8(4PI*r^2/8 - r^2) - 黒積 |> simplify
eq |> println

   -8*r^2 + 4*pi*r^2 - 黒積

solve(eq, r)[1] |> println

   sqrt(黒積)/(2*sqrt(-2 + pi))

黒積を与えて大円の半径を求める関数 f(黒積) は以下のようになる。

f(黒積) = sqrt(黒積)/(2*sqrt(-2 + pi));

黒積 = 10 のとき,大円の半径は以下のようになる。

f(10)

   1.479838839994118

逆に,大円の半径が 1.479838839994118 のとき,黒積は 10 になる。

r = 1.479838839994118
8(4*pi*r^2/8 - r^2)

   10.000000000000004

using Plots

function circle42f(x, y, r, color=:red)
  circlef(x, y, r, color)
  circlef(x, -y, r, color)
  circlef(y, -x, r, color)
  circlef(-y, -x, r, color)
end;

function draw(more=false)
   pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   r = 1
   plot()
   circlef(0, 0, 2r, :gray60)
   circle42f(0, r, r, :white)
   circlef(r, 0, r, :gray60, beginangle=90, endangle=180)
   circlef(r, 0, r, :gray60, beginangle=180, endangle=270)
   circlef(-r, 0, r, :gray60, beginangle=0, endangle=90)
   circlef(-r, 0, r, :gray60, beginangle=270, endangle=360)
   circlef(0, r, r, :gray60, beginangle=270, endangle=360)
   circlef(0, r, r, :gray60, beginangle=180, endangle=270)
   circlef(0, -r, r, :gray60, beginangle=0, endangle=90)
   circlef(0, -r, r, :gray60, beginangle=90, endangle=180)
   circle(0, 0, 2r, :black)
   circlef(r, 0, r, :lightblue1, beginangle=0, endangle=90)
   segment(0, 0, √2r, √2r, :red, lw=0.3)
   segment(0, 0, 2r, 0, :red, lw=1)
   circle(0, 0, 2r, :red, beginangle=0, endangle=45)
   if more
       delta = (fontheight = (ylims()[2]- ylims()[1]) / 500 * 10 * 2) /  3  # size[2] * fontsize * 2
       point(1.5, 1.1, "甲", :yellow, mark=false)
       point(0.55, 0.5, "乙", :yellow, mark=false)
       point(1.5, 0.7, "丙", mark=false)
       point(1.1, 0.3, "丁", mark=false)
       point(r, 0, "r", :black, :center, :top, delta=-delta/2)
       point(2r, 0, "2r", :black, :right, :top, delta=-delta/2)
       hline!([0], color=:gray, lw=0.5)
       vline!([0], color=:gray, lw=0.5)
   else
      plot!(showaxis=false)
   end
end;


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

コメントを投稿

Julia」カテゴリの最新記事