以下の内容はhttps://sangaku0418.hatenablog.com/entry/2025/02/14/125433より取得しました。


算額(その1616)

山形県新庄市堀端町 戸澤神社(戸沢神社) 文政元年(1818) 

http://www.wasan.jp/yamagata/tozawa.html
キーワード:円2個,円弧,直角三角形
#Julia #SymPy #算額 #和算 #数学


直角三角形の中に,円弧,大円,小円を容れる。鈎,股が与えられたとき,小円の最小値を求めよ。

鈎,股をそのまま変数名とし,弦を前もって求めておく。
大円の半径と中心座標を \(r_1, (r_1, r_1)\)
小円の半径と中心座標を \(r_2, (r_1 + 2\sqrt{r_1 r_2}, r_2)\)
円弧の半径と中心座標を \(R, (x, y)\)
とおき,以下の連立方程式を立てる。

算額の図では,円弧は股に一点で交差または外接している。そのためには円弧の中心の \(x\) 座標が股の長さに等しくなければならない。もしその条件が満たされないと,円弧は股と 2 点で交差することになり,算額の図のようにはならない。つまり,円弧は股に接しているのである。そのとき小円は確定し,必然的に最小値になる。

include("julia-source.txt");  # julia-source.txt ソース

using SymPy
@syms R::positive, x::positive, y::positive, r1::positive, r2::positive, 鈎::positive, 股::positive
@syms R, x, y, r1, r2, 鈎, 股
x = 股
y = R
eq1 = (x - r1)^2 + (y - r1)^2 - (R + r1)^2
eq2 = (x - (r1 + 2sqrt(r1*r2)))^2 + (y - r2)^2 - (R + r2)^2
eq3 = x^2 + (y - 鈎)^2 - R^2;

eq3 から円弧の半径,eq1 から大円の半径,eq2 から小円の半径が順次決定できる。

# R
ans_R = solve(eq3, R)[1]
ans_R |> println

    (股^2 + 鈎^2)/(2*鈎)

# r1
ans_r1 = solve(eq1, r1)[1]
ans_r1 |> println

    2*R + 股 - 2*sqrt(R*(R + 股))

# r2
@syms d
ans_r2 = solve(eq2, r2)[1] |> x -> apart(x, d) |> factor
ans_r2 |> println

    (r1 - 股)^2*(R + r1 - 2*sqrt(R*r1))/(4*(-R + r1)^2)

たとえば,\(鈎 = 3, 股 = 4\) のとき,\(弦 = 5, r1 = 0.666666666666667 = 2/3, r2 = 0.340136054421768 \)である。

ans_r2(R => ans_R, r1 => 0.666666666666667)(鈎 => 3, 股 => 4).evalf() |>  println

    0.340136054421769

描画関数プログラムのソースを見る

function draw(鈎, 股, more=false)
    pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
    R = (股^2 + 鈎^2)/(2*鈎)
    x = 股
    y = R
    r1 = 2R + 股 - 2sqrt(R*(R + 股))
    r2 = (r1 - 股)^2*(R + r1 - 2sqrt(R*r1))/(4(r1 - R)^2)
    @printf("r1 = %g;  R = %g;  x = %g;  y = %g;  r2 = %g\n", r1, R, x, y, r2)
    plot([0, 股, 0, 0], [0, 0, 鈎, 0], color=:green, lw=0.5)
    circle(x, y, R, :magenta)
    circle(r1, r1, r1)
    circle(r1 + 2sqrt(r1*r2), r2, r2, :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)", :magenta, :center, :bottom, delta=delta)
        point(x + 3delta, y - 7delta, "大円:r1,(r1,r1)", :red, :left, mark=false)
        point(x + 3delta, y - 10delta, "小円:r2,(r1+2√(r1*r2),r2)", :blue, :left, mark=false)
        segment(x, y, 股, 0, :orange)
    end
end;

draw(3, 4, true)


以下のアイコンをクリックして応援してください




以上の内容はhttps://sangaku0418.hatenablog.com/entry/2025/02/14/125433より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14