裏 RjpWiki

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

算額(その1512)

2025年01月01日 | Julia

算額(その1512)

六十六 岩手県一関市花泉町金沢大柳 金沢八幡宮 明治29年(1896)
山村善夫:現存 岩手の算額,昭和52年1月30日,熊谷印刷,盛岡市.

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

今有如図 03080
https://w.atwiki.jp/sangaku/pages/318.html

キーワード:円2個,四分円2個,正三角形
#Julia, #SymPy, #算額, #和算

正三角形と四分円2個を組み合わせ,斜線を 2 本引き,隙間に円を容れる。正三角形の一辺の長さが与えられたとき,円の直径を求める術を述べよ。

正三角形の一辺の長さを 2a
円の半径と中心座標を r,(x, y)
とおき,以下の連立方程式を解く。

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

using SymPy
@syms a, r, x, y
eq1 = dist(-a, 0, 2a*cosd(Sym(30)), 2a*sind(Sym(30)), x, y) - r^2
eq2 = dist(0, √Sym(3)*a, a, 0, x, y) - r^2
eq3 = x^2 + (√Sym(3)*a - y)^2 - (2a - r)^2;
# res = solve([eq1, eq2, eq3], (r, x, y))

function H(u)
    (r, x, y) = u
    return [
        dist(-a, 0, 2a*cosd(30), √3a + 2a*sind(30), x, y) - r^2,
        dist(0, √3a, a, 0, x, y) - r^2,
        x^2 + (√3a - y)^2 - (2a - r)^2
    ]
end;
a = 1/2
iniv = BigFloat[0.3, 0.6, 0.6]
res = nls(H, ini=iniv)

    ([0.35430062553187885, 0.576740154417105, 0.5756834046326507], true)

正三角形の一辺の長さが 1 のとき,円の直径は res[1][1]*2 = 0.7086012510637577 である。

function draw(more=false)
    pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
    (r, x, y) = res[1]
    plot([a, 0, -a, a], [0, √3a, 0, 0], color=:magenta, lw=0.5)
    println("正三角形の一辺の長さが $(2a) のとき,円の直径は $(2r) である。")
    circle(0, √3a, 2a, beginangle=-60, endangle=30)
    circle(x, y, r, :blue)
    segment(-a, 0, 2a*cosd(30), √3a + 2a*sind(30), :green)
    segment(0, √3a, 2a*cosd(30), √3a + 2a*sind(30), :green)
    circle(-a, 0, 2a, beginangle=60, endangle=150)
    segment(-a, 0, -a - 2a*cosd(30), 2a*sind(30), :green)
    segment(a, 0, -a - 2a*cosd(30), 2a*sind(30), :green)
    ox = 0
    oy = √3a/3
    len = sqrt(x^2 + (y - oy)^2)
    θ = atand(y - √3a/3, x) + 120
    x2 = len*cosd(θ)
    y2 = len*sind(θ) + oy
    circle(x2, y2, r, :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(x, y, "r,(x,y)", :blue, :center, delta=-delta)
        point(0, √3a, "√3a", :magenta, :center, :bottom, delta=2delta)
        point(a, 0, "a", :magenta, :center, delta=-1.5delta)
        ylims!(-7delta, √3a + 2a*sind(30) + 5delta)
    end
end;

draw(true)

術は以下のようである。SymPy では,無理だ。

三角面 = 1
天 = 2 - √3
地 = √天/2 + 1
人 = 1 - √天/2
A = (1 - √0.5)/人
円径 = 4(2天 - A)*地*三角面

    0.7086012510637592

 

 


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

コメントを投稿

Julia」カテゴリの最新記事