裏 RjpWiki

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

算額(その1496)

2024年12月26日 | Julia

算額(その1496)

参考文献

1).  二十四 岩手県一関萩荘 達古袋八幡神社 弘化3年(1846)
山村善夫:現存 岩手の算額,昭和52年1月30日,熊谷印刷,盛岡市.

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

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

キーワード:円数個,包絡線の周長
#Julia, #SymPy, #算額, #和算

問:今有如図欲随等円个数求周其等円径若干問得随等円个数周術如何

意訳:複数の円が互いに外接している(内部には空隙がある)。円の個数が与えられたとき円の包絡線の周長を求める術を述べよ。

これだけではどんな図についての問題かわからない。山村の図は不適切である。円が互いに接しており外円に内接しているとして外円の円周を求めても,術とは一致しない。

問の意図は,「今有如図」の図を見て分かった。解いてみて,術の通りの解が得られたので,納得した。

幾何学的に正確に述べれば,正 n 角形の頂点を中心とする,半径が正 n 角形の一辺の長さの 1/2 の円を n 個描く。隣り合う 2 つの円の共通接線の接点間の距離と一つの円の接点間の短い方の円弧の長さの和を求める術を述べよ(かえってわかりにくくなった)。

要するに,以下のような図で,緑の円弧の長さと青の線分の長さの和を求めよということ。

よく観察すればわかるが,円の直径を d とすれば,緑の円弧の長さの和は n にかかわらず π*d,青の線分の長さの和は n*d である。青の線分は,円の中心を結ぶ正 n 角形の辺であることもわかる。両者の和は d*(π + n) である。術にある通り,「円の個数と円周率を加え円の直径を掛ける」となる。

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

using SymPy

@syms n, R, r
eq = (R - r)*sind(180/n) - r
res = solve(eq, R)[1];

# 半径 r の円の中心が円周上にある円の半径 R
res |> println

    r + r/sin(pi/n)

function draw(n, more=false)
    pyplot(size=(600, 400), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
    r = 1/2
    θ =360/n
    θ2 = (0:n).*θ .+ 90
    R = r + r/sind(θ/2)
    x = (R - r).*cosd.(θ2)
    y = (R - r).*sind.(θ2)
    p = plot(showaxis=false)
    rotate(0, R - r, r, angle=θ, lw=0.1)
    for i = 1:n
        segment(x[i], y[i], x[i + 1], y[i + 1], :gray80, lw=0.5)
        θ3 = (i - 1)*θ + 90 + θ/2
        x1 = x[i] + r*cosd(θ3)
        y1 = y[i] + r*sind(θ3)
        x2 = x[i + 1] + r*cosd(θ3)
        y2 = y[i + 1] + r*sind(θ3)
        segment(x1, y1, x2, y2, :blue, lw=1)
        circle(x[i], y[i], r, beginangle=θ3 - θ, endangle=θ3, :green, lw=1)
        point(x1, y1)
        point(x2, y2)
    end
    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
    return p
end;

p2 = draw(2, true)
p3 = draw(3, true)
p4 = draw(4, true)
p5 = draw(5, true)
p6 = draw(6, true)
p7 = draw(7, true)
plot(p2, p3, p4, p5, p6, p7)

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

セルフうどん 製麺 七や 本店

2024年12月26日 | さぬきうどん

高松市成合町 セルフうどん 製麺 七や 本店

近頃の定番になった,しっぽくうどん

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

算額(その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でシェアする

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

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