裏 RjpWiki

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

算額(その840)

2024年04月07日 | Julia

算額(その840)

九十七 岩手県大船渡市猪川町 雨宝堂(現雨宝山竜宝院)   文政7年(1824)
山村善夫:現存 岩手の算額,昭和52年1月30日,熊谷印刷,盛岡市. http://www.wasan.jp/yamamura/yamamura.html
キーワード:円9個,外円

大円内に中円 1 個,小円 7 個を入れる。すべての小円は大円に内接し,左右の一番下の小円は中円にも外接している。大円,小円の直径がそれぞれ 5 寸,1 寸のとき,中円の直径はいかほどか。

大円の半径と中心座標を R, (0, 0)
中円の半径と中心座標を r1, (0, r1 - R)
小円の半径と中心座標を r2, (x0, y0), (x1, y1), (x2, y2), (x3, y3) 
とおく。
注:小円の中心は大円の直径上にはない。

まず,隣り合う 2 個の小円の中心と大円の中心のなす角 2θ を求める。 例えば, (x0, y0), (0, 0), (x1, y1)

include("julia-source.txt")

using SymPy

@syms R::positive, r1::positive, r2::positive, θ::positive;
(R, r2) = (5, 1) .// 2

eq1 = (R - r2)*sind(θ) - r2
θ = solve(eq1, θ)[1]
θ |> println

   180*asin(r2/(R - r2))/pi

右下端の小円の中心座標 (x3, y3) と中円が外接するという条件の方程式を解き,中円の半径を求める。

x3 = (R - r2)*cosd(90 - 6θ)
y3 = (R - r2)*sind(90 - 6θ)
eq2 = x3^2 + (y3 + (R - r1))^2 - (r1 + r2)^2;

res = solve(eq2, r1)[1]
res |> println

   2*R*(R - r2)*cos(3*asin(r2/(R - r2)))^2/(R*cos(6*asin(r2/(R - r2))) + R - r2*cos(6*asin(r2/(R - r2))) + r2)

大円と小円の直径がそれぞれ 5 寸,1 寸のときに,中円の直径は 3.39195979899498 寸である。

2res(R => 5/2, r2 => 1/2) |> println

   3.39195979899498

術では 3 + 78/197 = 3.3959390862944163 になっているが,図に描く限り差は認められない。
小数点以下第 3 位の 5 が 1 の誤記かどうかはわからないが,結構よい近似値になっている。

3 + 78/197

   3.3959390862944163

function draw(more=false)
   pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   (R, r2) = (5, 1) .// 2
   plot()
   circle(0, 0, R, :green)
   θ = 180*asin(1/4)/pi
   x = Vector{Float64}(undef, 4)
   y = Vector{Float64}(undef, 4)
   circle(0, R - r2, r2)
   for i in 2:4
       θ2 = 90 - (i - 1)*2θ
       x[i] = (R - r2)*cosd(θ2)
       y[i] = (R - r2)*sind(θ2)
       circle2(x[i], y[i], r2)
   end
   r1 = 10*cos(3*asin(1/4))^2/(2*cos(6*asin(1/4)) + 3)
   println("中円の直径 = $(2r1)")
   circle(0, r1 - R, r1, :blue)
   # r10 = (3 + 78/197)/2
   # circle(0, r10 - R, r10, :magenta)
   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)
       x3 = (R - r2)*cosd(90 - 6θ)
       y3 = (R - r2)*sind(90 - 6θ)
       point(0, R - r2, "小円:r2\n(x0,y0)", :red, :center, delta=-delta)
       point(x3, y3, "小円:r2\n(x3,y3)", :red, :center, delta=-delta)
       point(0, r1 - R, " 中円:r1,(0,r1-R)", :blue, :center, delta=-delta)
       point(0, R, "R", :green, :center, :bottom, delta=delta)
       point(R, 0, " R", :green, :left, :vcenter)
   end
end;

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

PVアクセスランキング にほんブログ村

PVアクセスランキング にほんブログ村