算額(その1332)
四十一 岩手県一関市牧沢 牧沢八幡神社 明治8年(1875)
山村善夫:現存 岩手の算額,昭和52年1月30日,熊谷印刷,盛岡市.
http://www.wasan.jp/yamamura/yamamura.html
キーワード:円3個,直角三角形,中鈎
#Julia, #SymPy, #算額, #和算
直角三角形の中に甲円を容れ,中鈎(直角の頂点から斜辺への垂線)で区切られた領域に乙円と丙円を容れる。鈎,股が 7 寸,24 寸のとき,3 円の直径の和はいかほどか。
上の図は,「問」とは異なり,「鈎,股が 3 寸,4 寸」のときのものである。問の場合の図は下の方に示す。
なお,それぞれの円の直径だけを求める場合には,算額(その2004)を参照のこと。
直角三角形の 3 辺を,「鈎」,「股」,「弦」
中鈎と斜辺の交点座標を (x0, y0)
甲円の半径と中心座標を r1, (r1, r1)
乙円の半径と中心座標を r2, (x2, r2)
丙円の半径と中心座標を r3, (r3, y3)
とおき,以下の連立方程式を解く。
まず,r1, x0, y0 を求める。
弦 = sqrt(鈎^2 + 股^2) である。
include("julia-source.txt");
using SymPy
@syms 鈎::positive, 股::positive, 弦::positive,
x0::positive, y0::positive,
r1::positive,
r2::positive, x2::positive,
r3::positive, y3::positive;
弦 = sqrt(鈎^2 + 股^2)
eq1 = (鈎 - y0)/x0 - 鈎/股
# eq2 = y0/(股 - x0) - 鈎/股
eq3 = sqrt(x0^2 + y0^2)/鈎 - 股/弦
eq4 = 鈎 + 股 - 弦 - 2r1
res = solve([eq1, eq3, eq4], (r1, x0, y0))[1]
(股/2 + 鈎/2 - sqrt(股^2 + 鈎^2)/2, 股*鈎^2/(股^2 + 鈎^2), 股^2*鈎/(股^2 + 鈎^2))
甲円の半径は 股/2 + 鈎/2 - 弦/2 である。
(x0, y0) = (股*鈎^2/(股^2 + 鈎^2), 股^2*鈎/(股^2 + 鈎^2))
eq5 = dist2(0, 鈎, 股, 0, x2, r2, r2)
eq6 = dist2(0, 鈎, 股, 0, r3, y3, r3)
eq7 = dist2(0, 0, x0, y0, x2, r2, r2)
eq8 = dist2(0, 0, x0, y0, r3, y3, r3)
res2 = solve([eq5, eq6, eq7, eq8], (r2, x2, r3, y3))[7]; # 7 of 16;
甲円,乙円の半径 r2, r3 は以下のように簡略化できる。
res2[1] |> simplify |> println
res2[3] |> simplify |> println
股*(股 + 鈎 - sqrt(股^2 + 鈎^2))/(2*sqrt(股^2 + 鈎^2))
鈎*(股 + 鈎 - sqrt(股^2 + 鈎^2))/(2*sqrt(股^2 + 鈎^2))
甲円,乙円,丙円の直径の和(径和とする)は,以下のようになる。
径和 = 2(res[1] + res2[1] + res2[3]) |> simplify
径和 |> println
2*股*鈎/sqrt(股^2 + 鈎^2)
鈎,股が 7 寸,24 寸のとき,径和は 336/25 = 13.44 寸である。
径和(鈎 => 7, 股 => 24) |> println
径和(鈎 => 7, 股 => 24).evalf() |> println
336/25
13.4400000000000
ちなみに,甲円,乙円,丙円の直径は 6 寸,144/25 寸, 42/25 寸である。
res[1](鈎 => 7, 股 => 24) * 2 |> println
res2[1](鈎 => 7, 股 => 24) * 2 |> println
res2[3](鈎 => 7, 股 => 24) * 2 |> println
6
144/25
42/25
function draw(鈎, 股, more)
pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
弦 = sqrt(股^2 + 鈎^2)
(r1, x0, y0) = (股/2 + 鈎/2 - 弦/2, 股*鈎^2/(股^2 + 鈎^2), 股^2*鈎/(股^2 + 鈎^2))
r2 = 股*(股 + 鈎 - 弦)/(2弦)
x2 = (-股^2 + 股*鈎 + 股*弦)/(2弦)
r3 = 鈎*(股 + 鈎 - 弦)/(2弦)
y3 = (股*鈎 - 鈎^2 + 鈎*弦)/(2弦)
println("径和 = $(2(r1+r2+r3))")
plot([0, 股, 0, 0], [0, 0, 鈎, 0], color=:green, lw=0.5)
segment(0, 0, x0, y0, :blue)
circle(r1, r1, r1)
circle(x2, r2, r2, :magenta)
circle(r3, y3, r3, :orange)
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, 鈎, " 鈎", :green, :left, :bottom, delta=delta/2)
point(股, 0, " 股", :green, :left, :bottom, delta=delta/2)
point(x0, y0, " (x0,y0)", :blue, :left, :bottom)
point(r1, r1, "甲円:r1,(r1,r1)", :red, :left, :bottom, delta=delta)
point(x2, r2, "乙円:r2,(x2,r2)", :magenta, :right, delta=-delta/2, deltax=8delta)
point(r3, y3, "丙円:r3\n(r3,y3)", :orange, :center, delta=-delta/2)
end
end;
draw(7, 24, false)