裏 RjpWiki

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

算額(その1554)

2025年01月22日 | Julia

算額(その1554)

四十 岩手県一関市牧沢 牧沢八幡神社 明治5年(1872)
山村善夫:現存 岩手の算額,昭和52年1月30日,熊谷印刷,盛岡市.

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

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

山村の図は相変わらず不適切で,算額を解くための参考になりえない。

「今有如図」に基づいて算額を解く。


キーワード:円7個,斜線2本
#Julia, #SymPy, #算額, #和算

大円と 2 本の斜線で区分される領域に 6 個の小円を描く。小円の直径が 1 寸のとき大円の直径はいかほどか。

計算するまでもなく,適切な補助線を引くと答えがわかる。

図で,上側の緑の共通接線と平行な二本の青の線を引くと,大円の直径は小円の直径の 4 倍であることがわかる。

これを,SymPy で求めると以下のようになる。

大円の半径と中心座標を r1, (0, 0)
小円の半径と中心座標を r2, (r1 + r2, 0), (x2, y2), (x3, y3)
とおく。

include("julia-source.txt");

using SymPy
@syms a::negative, r1::positive, r2::positive,
      x2::positive, y2::positive,
      x3::negative, y3::positive;
eq1 = -(r1 - 2r2)/a - r2/(r1 + r2)
eq2 = -r2/(r1 + r2 + a) - r2/(r1 + r2)
eq3 = x2^2 + y2^2 - (r1 + r2)^2
eq4 = (r1 + r2 - x2)^2 + y2^2 - 4r2^2
res = solve([eq1, eq2, eq3, eq4], (r1, a, x2, y2))[1]

    (4*r2, -10*r2, 23*r2/5, 4*sqrt(6)*r2/5)

大円の半径は,小円の半径の 4 倍である。

以下は,上下の円を描くために必要な円の中心を求めるための計算。

@syms θ
r1 = 4r2
a = -10*r2
θ = asin(r2/(r1 + r2 + a))
eq5 = x3^2 + y3^2 - (r1 - r2)^2
eq6 = dist2(a, 0, 0, a*tan(θ), x3, y3, r2)
res = solve([eq5, eq6], (x3, y3))[1]  # 1 of 3

    (-3*r2/5, 6*sqrt(6)*r2/5)

function draw(r2, more)
    pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
    r1 = 4r2
    (r1, a, x2, y2) = (4*r2, -10*r2, 23*r2/5, 4*sqrt(6)*r2/5)
    (x3, y3) = (-3*r2/5, 6*sqrt(6)*r2/5)
    θ = asin(r2/(r1 + r2 + a))
    println((sind(θ), cosd(θ)))
    plot()
    circle(0, 0, r1, :magenta)
    circle2(r1 + r2, 0, r2)
    circle22(x2, y2, r2)
    circle22(x3, y3, r2)
    slope = tan(asin(r2/(r1 + r2 + a)))
    abline(a, 0, slope, 1.05a, r1 + 2r2, :green)
    abline(0, 0, -slope, 1.05a, r1 + 2r2, :blue)
    abline(2a, 0, -slope, 1.05a, r1 + 2r2, :blue)
    abline(a, 0, -slope, 1.05a, r1 + 2r2, :green)
    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  
end;

draw(1/2, true)

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

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

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