裏 RjpWiki

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

算額(その1587)

2025年02月04日 | Julia

算額(その1587)

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

キーワード:円の区分法
#Julia, #SymPy, #算額, #和算, #数学

直径が 2r = 100m の円形の畑がある。この畑を図のように長さが t の線分で分割し,面積を 5 等分したい。その 1 つは辺の長さが d の正方形である。円周率を 3.16(円積率が 0.79)として,t, d を求める術を述べよ。

以下の連立方程式を解く。

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

using SymPy
@syms d, t, r, 円周率, S
#円周率 = 3.16
eq1 = (t - d/2)^2 + (d/2)^2 - r^2
eq2 = d^2 - 円周率*r^2/5
eq3 = S - d^2;
res = solve([eq1, eq2, eq3], (d, t, S))[4]  # 3 of 4

    (sqrt(10)*sqrt(r^2*(sqrt(円周率*(20 - 円周率)) + 10))*(円周率 - sqrt(円周率*(20 - 円周率)))/(10*(円周率 - 10)), sqrt(r^2*sqrt(-円周率^2 + 20*円周率)/10 + r^2), r^2*円周率/5)

# d
res[1] |> println
res[1](円周率 => 3.16, r => 50).evalf() |> println
res[1](円周率 => π, r => 50).evalf() |> println

    sqrt(10)*sqrt(r^2*(sqrt(円周率*(20 - 円周率)) + 10))*(円周率 - sqrt(円周率*(20 - 円周率)))/(10*(円周率 - 10))
    39.7492138287036
    39.6332729760601

# t
res[2] |> println
res[2](円周率 => 3.16, r => 50) |> println
res[2](円周率 => π, r => 50).evalf() |> println

    sqrt(r^2*sqrt(-円周率^2 + 20*円周率)/10 + r^2)
    65.7548859021696
    65.7219838704568

# S
res[3] |> println
res[3](円周率 => 3.16, r => 50) |> println
res[3](円周率 => π, r => 50).evalf() |> println

    r^2*円周率/5
    1580.00000000000
    1570.79632679490

function draw(r, more)
    pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
    円周率 = 3.16
    d = sqrt(10)*sqrt(r^2*(sqrt(円周率*(20 - 円周率)) + 10))*(円周率 - sqrt(円周率*(20 - 円周率)))/(10*(円周率 - 10))
    t = sqrt(r^2*sqrt(-円周率^2 + 20*円周率)/10 + r^2)
    plot()
    circle(0, 0, r)
    segment(-d/2, d/2, t - d/2, d/2, :blue)
    segment(-d/2, -d/2, -d/2, t - d/2, :blue)
    segment(d/2, -d/2, - t + d/2, -d/2, :blue)
    segment(d/2, d/2, d/2, - t + d/2, :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)
        point(-d/2, d/2, "(-d/2,d/2) ", :blue, :right, :vcenter)
        point(d/2, d/2, "(d/2,d/2) ", :blue, :center, :bottom, delta=delta/2)
        point(t - d/2, d/2, "(t-d/2,d/2)", :blue, :right, delta=-delta/2)
        point(0, r, "r", :red, :center, :bottom, delta=delta/2)
    end
end;

draw(100/2, true)


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

コメントを投稿

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

Julia」カテゴリの最新記事