裏 RjpWiki

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

算額(その6)新版

2025年01月11日 | Julia

算額(その6)新版

書き直した。

香川県高松市宮脇町 石清尾八幡宮 文化三年(1806)
http://www.wasan.jp/kagawa/iwaseo.html

千葉県富津市西大和田 吾妻神社 明治十年(1877)
http://www.wasan.jp/chiba/azuma.html

山口正義:やまぶき 第57号
https://yamabukiwasan.sakura.ne.jp/ymbk57.pdf

キーワード:円10個,外円,正三角形
#Julia, #SymPy, #算額, #和算

大円の中に,正三角形 1 個,甲円 3 個,乙円 6 個を容れる。大円の直径が 103 寸 5 分のとき,正三角形の一辺の長さを求めよ。

吾妻神社のものは,外円と甲円の直径を与えて乙円の直径を問う問題にしている。

正三角形の一辺の長さを a
大円の半径と中心座標を R, (0,0)
甲円の半径と中心座標を r2, (0, R - r2)
乙円の半径と中心座標を r1, (x1, y1)
とおき,以下の連立方程式を解く。

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

using SymPy
@syms R, r1, x1, y1, r2
R = 1035//20
eq1 = x1^2 + (R - r2 - y1)^2 - (r1 + r2)^2
eq2 = x1^2 + y1^2 - (R - r1)^2
eq3 = dist2(0, 0, √Sym(3), 1, x1, y1, r1)
eq4 = dist2(0, R - 2r2, (R - 2r2)*√Sym(3)/2, -(R - 2r2)/2, x1, y1, r1);

まず x1, y1 を求める。

res = solve([eq1, eq2], (x1, y1))[1];

# x1
res[1] |> println

    -6*sqrt(23)*sqrt(-r1*r2*(4*r1 + 4*r2 - 207))/(4*r2 - 207)

# y1
res[2] |> println

    (16*r1*r2 + 828*r1 + 828*r2 - 42849)/(4*(4*r2 - 207))

eq4 の x1, y1 に代入し,r1 を求める。

eq14 = eq4(x1 => res[1], y1 => res[2]) |> simplify |> numerator;
ans_r1 = solve(eq14, r1)[1]
ans_r1 |> println

    (32*r2^3 - 72*sqrt(23)*r2^2*sqrt(621 - 8*r2) - 11592*r2^2 + 3726*sqrt(23)*r2*sqrt(621 - 8*r2) + 514188*r2)/(16*r2^2 + 4968*r2 + 385641)

eq3 の x1, y1, r1 に代入し,r2 を求める。

eq13 = eq3(x1 => res[1], y1 => res[2])(r1 => ans_r1) |> simplify |> numerator;
ans_r2 = solve(eq13, r2)[6]  # 6 of 7
ans_r2 |> println

    207*CRootOf(1024*x^4 + 14080*x^3 - 7664*x^2 + 936*x - 27, 1)

r2 は 1024x^4 + 14080x^3 - 7664x^2 + 936x - 27 = 0 の実数解の 207 倍ということである。
実際の値は,ans_r2.evalf() で得られる。r2 = 8.78541777524225 ということである。

正三角形の一辺の長さ a は,a = (R - 2r2)*√3 なので,R = 103.5/2, r2 = 8.78541777524225 のとき,a = 59.2000493868128 である。

((R - 2r2)*√3)(R => 103.5/2, r2 => 8.78541777524225) |> println

    59.2000493868128

「術」は以下のように計算を進める。

大円径 = 103.5

    103.5

乾 = √3

    1.7320508075688772

坤 = 57乾 +  102

    200.726896031426

(坤 - sqrt(11364乾 + 19695))*大円径/4

    59.20004938681292

まとめると以下のように,大円径の (57√3 +  102 - sqrt(11364√3 + 19695))/4 = 0.571981153495777 倍ということである。
大円径が 103.5 寸のとき,三角形の一辺の長さは 59.20004938681292 であり,上述の解と一致する

(57√3 +  102 - sqrt(11364√3 + 19695))/4*大円径

    59.20004938681292

function triangle(ox, oy, r; color=:blue)
    θ = [90, 210, 330, 90]
    x = r .* cosd.(θ)
    y = r .* sind.(θ)
    plot!(ox .+ x, oy .+ y, color=color, lw=0.5)
end;

function draw(R, more=false)
    pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
    r2 = 2R*0.08488326352891062
    r1 = (32*r2^3 - 72*sqrt(23)*r2^2*sqrt(621 - 8*r2) - 11592*r2^2 + 3726*sqrt(23)*r2*sqrt(621 - 8*r2) + 514188*r2)/(16*r2^2 + 4968*r2 + 385641)
    x1 = -6*sqrt(23)*sqrt(-r1*r2*(4*r1 + 4*r2 - 207))/(4*r2 - 207)
    y1 = (16*r1*r2 + 828*r1 + 828*r2 - 42849)/(4*(4*r2 - 207))
    a = √3(R - 2r2)
    @printf("大円の直径が %g のとき,三角形の一辺の長さは %g である。\nまた,甲円,乙円の直径はそれぞれ %g, %g である。\n", 2R, a, 2r2, 2r1)
    plot()
    circle(0, 0, R, :magenta)
    triangle(0, 0, R - 2r2)
    rotate(0, R - r2, r2, :green)
    rotate(x1, y1, r1, :red)
    rotate(-r1, -(R - 2r2)/2 - r1, r1, :red)
    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(0, R, "R", :magenta, :center, :bottom, delta=delta)
        point(0, R - r2, "甲円:r2\n(0,R-r2)", :green, :center, :bottom, delta=delta)
        point(x1, y1, "乙円:r1,(x1,y1)", :red, :center, delta=-delta)
    end
end

draw(103.5/2, true)

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

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

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