裏 RjpWiki

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

算額(その1503)

2024年12月29日 | Julia

算額(その1503)

六十三 花泉町金沢 大門神社・大門観世音菩薩堂 明治13年(1880)
山村善夫:現存 岩手の算額,昭和52年1月30日,熊谷印刷,盛岡市.

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

今有如図 03064
https://w.atwiki.jp/sangaku/pages/292.html

キーワード:円8個,外円,弦
#Julia, #SymPy, #算額, #和算

大円の一部である円弧(弓形)の中に小円を 2 個と界斜を容れる。大円の径が 8 寸,矢が 2 寸,小円の直径が 1 寸のとき,界斜はいかほどか。

山村の図は右側の小円と界斜の端点の位置が違う。

「今有如図」の仮定で解を導き,答と一致することを確認した。

大円の半径と中心座標を R, (0, 0)
矢をそのまま「矢」
小円の半径と中心座標を r, (x, R - 矢 + r)
界斜の端点を (x1, R - 矢), (x2, sqrt(R^2 - x2^2))
とおき,以下の連立方程式を解く。

include("julia-source.txt");

using SymPy

@syms R::positive, 矢::positive, x::positive, r::positive,
      x1::positive, x2::negative
y = R - 矢
eq1 = x^2 + (y + r)^2 - (R - r)^2
eq2 = dist(x2, sqrt(R^2 - x2^2), x1, y, x, y + r) - r^2
eq3 = (sqrt(R^2 - x2^2) - y)/(x1 - x2) - r/x1;
# res = solve([eq1, eq2, eq3], (x, x1, x2))

function H(u)
    (x, x1, x2) = u
    return [
        x^2 + (y + r)^2 - (R - r)^2,
        dist(x2, sqrt(R^2 - x2^2), x1, y, x, y + r) - r^2,
        (sqrt(R^2 - x2^2) - y)/(x1 - x2) - r/x1
    ]
end;
R = 8//2
矢 = 2
y = R - 矢
r = 1//2
iniv = BigFloat[2.5, 2.5, -2.6]
res = nls(H, ini=iniv)

    ([2.449489742783178, 2.3979157616563596, -2.597742075127723], true)

界斜は sqrt((x1 - x2)^2 + (sqrt(R^2 - x2^2) - (R - 矢))^2) により求めることができる。
大円の直径が 8 寸,矢が 2 寸,円の直径が 1 寸のとき,5.103103630798287 寸である。

(x, x1, x2) = res[1]
sqrt((x1 - x2)^2 + (sqrt(R^2 - x2^2) - (R - 矢))^2)

    5.103103630798287

function draw(r1, r2, more=false)
    pyplot(size=(500, 500), showaxis=true, grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
    R = 8//2
    矢 = 2
    r = 1//2
    y = R - 矢
    (x, x1, x2) = res[1]
    界斜 = sqrt((x1 - x2)^2 + (sqrt(R^2 - x2^2) - (R - 矢))^2)
    println("界斜 = $界斜")
    plot()
    circle(0, 0, R, :purple)
    segment(x2, sqrt(R^2 - x2^2), x1, R - 矢, :orange)
    circle2(x, y + r, r, :blue)
    segment(-sqrt(R^2 - y^2), y, sqrt(R^2 - y^2), y)
    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(x2, sqrt(R^2 - x2^2), "(x2,sqrt(R^2-x2^2))", :green, :left, :bottom, deltax=3delta)
        point(x1, y, "(x1,y)", :green, :center, delta=-delta)
        point(R, 0, " R", :purple, :left, :bottom, delta=delta)
        point(x, y + r, "(x,y+r)", :blue, :center, delta=-delta)
        ylims!(0, R)
    end
end;

draw(12/2, 8/2, true)


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

コメントを投稿

Julia」カテゴリの最新記事