算額あれこれ

算額問題をコンピュータで解きます

算額(その1718)

福島県白河市明神 境の明神 寛延2年(1749)

~落書き帳「○△□」~ 42.○△□のおにぎり弁当(続々編)
http://streetwasan.web.fc2.com/math15.6.24.html
キーワード:円1個,正三角形,直角三角形,正方形
#Julia #SymPy #算額 #和算 #数学


直角三角形の中に,円,正三角形,正方形を図のように内接させる。
鈎の長さと円の半径を与えて,股,弦の長さ,および正三角形と正方形の辺の長さを求めよ。ただし,(鈎の長さ)>(円の直径)とする。


円の半径と中心座標を \(r, (r, r)\)
鈎の上にある正方形の頂点座標を \( (0, c), (0, d); d > c\)
股の上にある正三角形の頂点座標を \( (a, 0), (2b - a); b > a\)
とおき,以下の連立方程式を解く。ただし,一度には解けないので,逐次解いていく。

まず,eq1, eq5 は単独の方程式として解くことができる。

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

using SymPy

@syms 鈎::positive, 股::positive, r::positive,
      a::positive, b::positive, c::positive, d::positive
eq1 = √Sym(3)*(b - a)/(股 - b) - 鈎/股
eq2 = ( (d - c) - r)^2 + (c - r)^2 - r^2
eq3 = 鈎 + 股 - sqrt(鈎^2 + 股^2) - 2r
eq4 = d/(股 - (d - c)) - 鈎/股
eq5 = dist2(a, 0, b, √Sym(3)*(b - a), r, r, r);
# res = solve([eq1, eq2, eq3, eq4, eq5], (股, a, b, c, d))

# 股
ans_股 = solve(eq3, 股)[1]
ans_股 |> println
ans_股 |> display

    2*r*(r - 鈎)/(2*r - 鈎)

    \( \displaystyle \frac{2 r \left(r - 鈎\right)}{2 r - 鈎}\)

鈎が 3,円の半径が 1 のとき,股は 2(1 - 3)/(2 - 3) = 4 である。

# 弦
弦 = sqrt(鈎^2 + ans_股^2) |> simplify
弦 |> println
弦 |> display

    sqrt(4*r^2*(r - 鈎)^2 + 鈎^2*(2*r - 鈎)^2)/Abs(2*r - 鈎)

    \( \displaystyle \frac{\sqrt{4 r^{2} \left(r - 鈎\right)^{2} + 鈎^{2} \left(2 r - 鈎\right)^{2}}}{\left|{2 r - 鈎}\right|}\)

鈎が 3,円の半径が 1 のとき,弦は 5 である。

弦(鈎 => 3, r => 1) |> println

    5

# a
ans_a = solve(eq5, a)[1]
ans_a |> println
ans_a |> display

    r*(sqrt(3) + 3)/3

\( \displaystyle \frac{r \left(\sqrt{3} + 3\right)}{3}\)

eq1, eq2, eq5 の 股,\(a\) に上で求められた結果を代入し,新たな方程式を得る。

eq11 = eq1(股 => ans_股, a => ans_a) |> simplify |> numerator |> x -> x/(2r - 鈎) |> expand

\( \displaystyle - 6 \sqrt{3} b r^{2} - 6 b r 鈎 + 6 \sqrt{3} b r 鈎 + 3 b 鈎^{2} + 6 r^{3} + 6 \sqrt{3} r^{3} - 6 \sqrt{3} r^{2} 鈎 - 6 r 鈎^{2}\)

eq12 = eq2 |> expand

\( \displaystyle 2 c^{2} - 2 c d + d^{2} - 2 d r + r^{2}\)

eq14 = eq4(股 => ans_股) |> expand |> simplify |> numerator |> simplify |> x -> x/(r - 鈎/2) |> expand

\( \displaystyle - 2 c r 鈎 + c 鈎^{2} + 2 d r^{2} - d 鈎^{2} - 2 r^{2} 鈎 + 2 r 鈎^{2}\)

eq11, eq12, eq14 を 3 元連立方程式として解く。

res1 = solve([eq11, eq12, eq14], (b, c, d))[1]  # 1 of 2

    (2*r^3/(2*sqrt(3)*r^2 - 2*sqrt(3)*r*鈎 + 2*r*鈎 - 鈎^2) + 2*sqrt(3)*r^3/(2*sqrt(3)*r^2 - 2*sqrt(3)*r*鈎 + 2*r*鈎 - 鈎^2) - 2*sqrt(3)*r^2*鈎/(2*sqrt(3)*r^2 - 2*sqrt(3)*r*鈎 + 2*r*鈎 - 鈎^2) - 2*r*鈎^2/(2*sqrt(3)*r^2 - 2*sqrt(3)*r*鈎 + 2*r*鈎 - 鈎^2), (-2*r^2*鈎 + 2*r*鈎^2 + (2*r^2 - 鈎^2)*(-2*sqrt(2)*r^(3/2)*鈎*sqrt(-(r - 鈎)^3)*(2*r - 鈎)/(8*r^4 - 8*r^3*鈎 + 鈎^4) + r*鈎*(8*r^3 - 8*r^2*鈎 - 2*r*鈎^2 + 3*鈎^3)/(8*r^4 - 8*r^3*鈎 + 鈎^4)))/(鈎*(2*r - 鈎)), -2*sqrt(2)*r^(3/2)*鈎*sqrt(-(r - 鈎)^3)*(2*r - 鈎)/(8*r^4 - 8*r^3*鈎 + 鈎^4) + r*鈎*(8*r^3 - 8*r^2*鈎 - 2*r*鈎^2 + 3*鈎^3)/(8*r^4 - 8*r^3*鈎 + 鈎^4))

# b
ans_b = res1[1] |> simplify
ans_b |> println
ans_b

    2*r*(r^2 + sqrt(3)*r^2 - sqrt(3)*r*鈎 - 鈎^2)/(2*sqrt(3)*r^2 - 2*sqrt(3)*r*鈎 + 2*r*鈎 - 鈎^2)

\( \displaystyle \frac{2 r \left(r^{2} + \sqrt{3} r^{2} - \sqrt{3} r 鈎 - 鈎^{2}\right)}{2 \sqrt{3} r^{2} - 2 \sqrt{3} r 鈎 + 2 r 鈎 - 鈎^{2}}\)

# c
ans_c = res1[2] |> simplify
ans_c |> println
ans_c |> display

    (-2*r*(r - 鈎)*(8*r^4 - 8*r^3*鈎 + 鈎^4) - (2*r^2 - 鈎^2)*(2*sqrt(2)*r^(3/2)*sqrt(-(r - 鈎)^3)*(2*r - 鈎) - r*(8*r^3 - 8*r^2*鈎 - 2*r*鈎^2 + 3*鈎^3)))/( (2*r - 鈎)*(8*r^4 - 8*r^3*鈎 + 鈎^4))

\( \displaystyle \frac{- 2 r \left(r - 鈎\right) \left(8 r^{4} - 8 r^{3} 鈎 + 鈎^{4}\right) - \left(2 r^{2} - 鈎^{2}\right) \left(2 \sqrt{2} r^{\frac{3}{2}} \sqrt{- \left(r - 鈎\right)^{3}} \left(2 r - 鈎\right) - r \left(8 r^{3} - 8 r^{2} 鈎 - 2 r 鈎^{2} + 3 鈎^{3}\right)\right)}{\left(2 r - 鈎\right) \left(8 r^{4} - 8 r^{3} 鈎 + 鈎^{4}\right)}\)

# d
ans_d = res1[3] |> simplify
ans_d |> println
ans_d |> display

    鈎*(-2*sqrt(2)*r^(3/2)*sqrt(-(r - 鈎)^3)*(2*r - 鈎) + r*(8*r^3 - 8*r^2*鈎 - 2*r*鈎^2 + 3*鈎^3))/(8*r^4 - 8*r^3*鈎 + 鈎^4)

\( \displaystyle \frac{鈎 \left(- 2 \sqrt{2} r^{\frac{3}{2}} \sqrt{- \left(r - 鈎\right)^{3}} \left(2 r - 鈎\right) + r \left(8 r^{3} - 8 r^{2} 鈎 - 2 r 鈎^{2} + 3 鈎^{3}\right)\right)}{8 r^{4} - 8 r^{3} 鈎 + 鈎^{4}}\)

正方形の一辺の長さは \(d - c\) である。\(sq = d - c\) とする。

sq = ans_d - ans_c |> factor

\( \displaystyle \frac{2 \left(4 \sqrt{2} r^{\frac{9}{2}} \sqrt{- r^{3} + 3 r^{2} 鈎 - 3 r 鈎^{2} + 鈎^{3}} - 6 \sqrt{2} r^{\frac{7}{2}} 鈎 \sqrt{- r^{3} + 3 r^{2} 鈎 - 3 r 鈎^{2} + 鈎^{3}} + 2 \sqrt{2} r^{\frac{5}{2}} 鈎^{2} \sqrt{- r^{3} + 3 r^{2} 鈎 - 3 r 鈎^{2} + 鈎^{3}} + 2 r^{4} 鈎^{2} - 5 r^{3} 鈎^{3} + 4 r^{2} 鈎^{4} - r 鈎^{5}\right)}{\left(2 r - 鈎\right) \left(8 r^{4} - 8 r^{3} 鈎 + 鈎^{4}\right)}\)

鈎が 3,円の半径が 1 のとき,正方形の一辺の長さは 8/13 = 0.615384615384615 である。

sq(鈎 => 3, r => 1)

\( \displaystyle \frac{8}{13}\)

sq(鈎 => 3, r => 1).evalf() |> println

    0.615384615384615

正三角形の一辺の長さは \(2(b - a)\) である。\(tri = 2(b - a)\) とする。

tri = 2(ans_b - ans_a) |> simplify

\( \displaystyle \frac{2 r 鈎 \left(- 2 \sqrt{3} r - 3 鈎 + \sqrt{3} 鈎\right)}{3 \left(2 \sqrt{3} r^{2} - 2 \sqrt{3} r 鈎 + 2 r 鈎 - 鈎^{2}\right)}\)

鈎が 3,円の半径が 1 のとき,正三角形の一辺の長さは 1.46410161513775 である。

tri(鈎 => 3, r => 1)

\( \displaystyle \frac{2 \left(-9 + \sqrt{3}\right)}{- 4 \sqrt{3} - 3}\)

tri(鈎 => 3, r => 1).evalf() |> println

    1.46410161513775

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

function draw(鈎, r, more=false)
    pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
    (股, a, b, c, d) = [2.0, 0.7886751345948129, 1.1547005383792515, 0.9615384615384616, 1.2692307692307692]
    股 = 2*r*(r - 鈎)/(2*r - 鈎)
    弦 = sqrt(鈎^2 + 股^2)
    a = r*(sqrt(3) + 3)/3
    b = 2*r*(r^2 + sqrt(3)*r^2 - sqrt(3)*r*鈎 - 鈎^2)/(2*sqrt(3)*r^2 - 2*sqrt(3)*r*鈎 + 2*r*鈎 - 鈎^2)
    c = (-2*r*(r - 鈎)*(8*r^4 - 8*r^3*鈎 + 鈎^4) - (2*r^2 - 鈎^2)*(2*sqrt(2)*r^(3/2)*sqrt(-(r - 鈎)^3)*(2*r - 鈎) - r*(8*r^3 - 8*r^2*鈎 - 2*r*鈎^2 + 3*鈎^3)))/( (2*r - 鈎)*(8*r^4 - 8*r^3*鈎 + 鈎^4))
    d = 鈎*(-2*sqrt(2)*r^(3/2)*sqrt(-(r - 鈎)^3)*(2*r - 鈎) + r*(8*r^3 - 8*r^2*鈎 - 2*r*鈎^2 + 3*鈎^3))/(8*r^4 - 8*r^3*鈎 + 鈎^4)
    @printf("鈎が %g,円の半径が %g のとき,股は %g,弦は %g,正方形の一辺の長さは %g, 正三角形の一辺の長さは %g である。\n", 鈎, r, 股, 弦, d - c, 2(b - a))
    plot([0, 股, 0,  0], [0, 0, 鈎, 0], color=:green, lw=0.5)
    plot!([a, 2b - a, b, a], [0, 0, √3(b - a), 0], color=:magenta, lw=0.5)
    circle(r, r, r)
    rect(0, c, d - c, d, :blue)
    if more
        delta = (fontheight = (ylims()[2]- ylims()[1]) / 500 * 10 * 2) /  3  # size[2] * fontsize * 2
        vline!([0], color=:gray80, lw=0.5)
        hline!([0], color=:gray80, lw=0.5)
        point(a, 0, "a", :magenta, :center, delta=-delta)
        point(b, 0, "b", :magenta, :center, delta=-delta)
        point(股, 0, "股", :green, :center, delta=-delta)
        point(b, √3(b - a), " (b,√3(b-a)", :magenta, :left, :vcenter)
        point(0, c, "c ", :blue, :right, :vcenter)
        point(0, d, "d ", :blue, :right, :vcenter)
        point(0, 鈎, "鈎 ", :green, :right, :vcenter)
        point(d - c, d, " (d-c,d)", :blue, :left, :vcenter)
        point(d - c, c, "(d-c,c)", :blue, :left, delta=-delta)
        point(r, r, "(r,r)", :red, :center, delta=-delta)
        plot!(xlims=(-10delta, 股 + 3delta), ylims=(-10delta, 鈎 + 3delta))
    end
end;

draw(3, 1, true)
draw(3, 1.2, true)


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