裏 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でシェアする
« セルフうどん 製麺 七や 本店 | トップ | 算額(その861)改訂版 »
最新の画像もっと見る

コメントを投稿

Julia」カテゴリの最新記事