裏 RjpWiki

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

算額(その1588)

2025年02月04日 | Julia

算額(その1588)

岡山県瀬戸内市長船町土師宮森 片山日子神社 明治6年(1873)
深川英俊,トニー・ロスマン:聖なる数学:算額,p. 107,森北出版株式会社,2010年4月22日.

キーワード:
#Julia, #SymPy, #算額, #和算, #数学

扇面に大円 2 個を容れ,大円の共通接線と扇端に接するように小円 1 個を容れる。弦の長さと小円の直径が与えられたとき,大円の直径はいかほどか。

注1:深川は「弦の長さが与えられたとき大円と小円の直径を求めよ」と書きながら,弦の長さの他に小円の直径も与えられたとして大円の直径を求めている。
注2:問題では扇の開いた角度に関しては条件がない。図はそのようにはなっていないが,「大円が扇骨に接する」ようにしてもよいだろう。ここでは,開いた角度を 120° で描いた。また,要から地紙までの長さ(骨の見える部分の長さ)にも指定はないが,算額の図では大円と接するように描いている。

扇長(要から扇端まで)を R
弦の長さを d
小円の半径と中心座標を r2, (0, R - r2)
大円の半径と中心座標を r1, (r1, R - 2r2 - r1)
とおき,以下の連立方程式を解く。

include("julia-source.txt")
# julia-source.txt ソース https://blog.goo.ne.jp/r-de-r/e/ad3a427b84bb416c4f5b73089ae813cf

using SymPy
@syms d::positive, t::positive, R::positive, r1::positive, r2::positive
eq1 = (d/2)^2 + (R - 2r2)^2 - R^2
eq2 = r1^2 + (R - 2r2 - r1)^2 - (R - r1)^2
res = solve([eq1, eq2], (r1, R))[1];

# r1
res[1] |> println
res[1](d => 3.62438, r2 => 0.34/2) |> println

    -2*r2 + sqrt(d^2 + 16*r2^2)/2
    1.50380926239674

弦の長さが 3.62438,小円の半径が 0.34/2 のとき,大円の半径は 1.50380926239674 である。

# R
res[2] |> println
res[2](d => 3.62438, r2 => 0.34/2) |> println

    (d^2 + 16*r2^2)/(16*r2)
    4.99945970014706

同じく,扇長は 4.99945970014706 である。

弦の長さと小円の直径がずいぶんと半端な数なのは,扇長がきれいな数(ほとんど 5)になるための条件なのであろう。
大円の半径もある程度きれいな数であるが,扇長ほどの綺麗さではない。もとの算額は扇長の方を求めていたのかな?

算額・和算では,注目するパラメータだけを求めさせる問題が多いが,連立方程式を解くという方法では,このような発見もあるんだなあ。深川は,気づいていただろうか。

function draw(d, r2, more)
    pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
    r1 = -2*r2 + sqrt(d^2 + 16*r2^2)/2
    R = (d^2 + 16*r2^2)/(16*r2)
    R2 = 0.3R
    y = R - 2r2
    x = sqrt(R^2 - y^2)
    (x0, y0) = R.*(cosd(30), sind(30))
    plot([-x0, 0, x0], [y0, 0, y0], color=:black, lw=0.5)
    circle(0, 0, R, beginangle=30, endangle=150)
    circle(0, 0, R - 2r1, beginangle=30, endangle=150)
    circle(0, R - r2, r2, :green)
    circle2(r1, R - 2r2 - r1, r1, :blue)
    segment(-x, y, x, y, :orange)
    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)
        dimension_line(2delta, -2delta, x0 + 2delta, y0 - 2delta, " R", :black, :center, delta=-2delta)
        dimension_line(-x, R - 2r2 - 2delta, x, R - 2r2 - 2delta, "d", :black, :center, delta=-3delta)
        point(r1, R - 2r2 - r1, "大円:r1,(r1,R-2r2-r1)", :blue, :center, delta=-delta)
        point(0, R - r2, "小円:r2,(0,R-r2)", :blue, :left, :bottom, delta=3delta)
    end
end;

draw(3.62438, 0.34/2, true)


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

コメントを投稿

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

Julia」カテゴリの最新記事