算額あれこれ

算額問題をコンピュータで解きます

算額(その449)

松山市南柳井町 中村正教 昭和12年(1937)

数学史研究,通巻 186 号,2005年7月〜9月
http://www.wasan.jp/sugakusipdf/186.pdf
キーワード:円5個,外円
#Julia #SymPy #算額 #和算 #数学


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

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

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

include("julia-source.txt");  # 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

描画関数プログラムのソースを見る

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)
   end
end;


以下のアイコンをクリックして応援してください