裏 RjpWiki

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

算額(その1495)

2024年12月26日 | Julia

算額(その1495)

参考文献

1).  四 岩手県花巻市 東光寺 慶応2年(1866)
山村善夫:現存 岩手の算額,昭和52年1月30日,熊谷印刷,盛岡市.

http://www.wasan.jp/yamamura/yamamura.html

2).  今有如図 03054
https://w.atwiki.jp/sangaku/pages/138.html

キーワード:球9個,円錐
#Julia, #SymPy, #算額, #和算

円錐の中に大球 1 個,小球 8 個を容れる。大球は円錐の側面に内接し,小球と外接する。小球は円錐の側面に内接し,大球に外接し,互いに外接し合っている。
小球の直径が 1 寸のとき,円錐の底面の直径はいかほどか。


左図は横から見た図,右図は上から見た図 赤は大球,青は小球,緑は円錐の外縁(右の図では底面の円)。小球の中心は灰色の円周上にある。

円錐の底面の半径と座標を a, (0, 0, 0)
円錐の高さを h
大球の半径と中心座標を r1, (0, 0, r1)
小球の半径と中心座標を r2, (b, 0, r2)
とおき,以下の連立方程式を r2 を既知として解き (a, r1, h) を求める。

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

using SymPy

@syms a, b, h, r1, r2
b = r2/sind(Sym(45)/2)
eq1 = r1/(h - r1) - a/sqrt(a^2 + h^2)
eq2 = 2sqrt(r1*r2) - b
eq3 = r2/(a - b) - r1/a;
res = solve([eq1, eq2, eq3], (a, r1, h))[1]

    (2*r2*(1 + sqrt(2))/sqrt(2 - sqrt(2)), r2*(sqrt(2) + 2)/2, 8*r2*(2*sqrt(2) + 5)/17)

底面の円の半径 a は,小球の半径 r2 の (2 + 2√2)/sqrt(2 - √2) = sqrt(2 - √2)*(4 + 3√2) 倍である。

小球の直径が 1 寸のとき,底面の円の直径は 6.3086440597979 寸である。
ちなみに円錐の高さは 1.8419828528814564 寸,大球の直径は 1.7071067811865475 寸である。

術は
天 = √2 + 2
大球径 = (sqrt(天)*天)*小球径
である。
(sqrt(天)*天) は (sqrt(2) + 2)^(3/2) にまで簡約化できる。

(sqrt(2) + 2)^(3/2)

    6.3086440597979

function draw(r2, more=false)
    pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
    (a, r1, h) = (2*r2*(1 + sqrt(2))/sqrt(2 - sqrt(2)), r2*(sqrt(2) + 2)/2, 8*r2*(2*sqrt(2) + 5)/17)
    b = r2/sind(45/2)
    @printf("小球の直径が %g のとき,底面の円の直径は %g, 高さは %g, 大球の直径は %g である。\n", 2r2, 2a, h, 2r1)
    p1 = plot([a, 0, -a, a], [0, h, 0, 0], color=:green, lw=0.5)
    circle(0, r1, r1)
    circle(b, r2, r2, :blue)
    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)
    end
    p2 = plot()
    rotate(b, 0, r2, angle=45, :blue)
    circle(0, 0, b, :gray80)
    circle(0, 0, r1)
    circle(0, 0, a, :green)
    plot(p1, p2)
end;

draw(1/2, true)


コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« 算額(その1494) | トップ | セルフうどん 製麺 七や 本店 »
最新の画像もっと見る

コメントを投稿

Julia」カテゴリの最新記事