算額(その69)
長野県長野市篠井 長谷観音堂 亨和3年(1803)
http://www.wasan.jp/nagano/hasekannon.html
直角三角形の中に大円と小円が斜線で区切られて入っている。大円,小円の径がそれぞれ 32 尺,24 尺である。
鉤,股,弦を求めよ。
注:直角三角形の直角を挟む短い辺(鉤)と長い辺(股)と直角に対する辺(弦)
図のように記号を定め,方程式を解く。
using SymPy
@syms AB::positive, BC::positive, BD::positive, AD::positive, CD::positive;
各線分が整数になるように BD=12 と仮置して割合を求める。
eq1 = BD^2 + AD^2 - AB^2;
eq2 = BD^2 + CD^2 - BC^2;
eq3 = 16BC - 12AB;
eq4 = 16BD - 12AD;
eq5 = BD - 12;
solve([eq1, eq2, eq3, eq4, eq5], (AB, BC, BD, AD, CD))
1-element Vector{NTuple{5, Sym}}:
(20, 15, 12, 16, 9)
三角形 ABD において,AB, BD, AD の長さは実際は 20n, 12n, 16n (n は整数) であり,その中に半径 16 の円が内接している。
Ag = Ae, Bg = Bf, De = Df = 16
Ag + Bg = AB = 20n
Ae + De = Ae + 16 = AD = 16n より,Ae = 16n - 16 = Ag
Bf + Df = Bf + 16 = BD = 12n より,Bf = 12n - 16 = Bg
Ag + Bg = 28n - 32 = AB = 20n より,8n = 32 で,n = 4
すなわち,AB, BD, AD の長さは実際は 20n=80, 12n=48, 16n=64
三角形 ABD とBCD は相似比 4:3 なので BC = 80*3/4 = 60, CD = 48*3/4 = 36
以上から,直角三角形の直角を挟む短い辺(鉤)の長さは BC = 60, 長い辺(股)の長さは AB = 80,直角に対する辺(弦)の長さは AD + CD = 64 + 36 = 100 であることがわかる。
using Plots
function circle(ox, oy, r, color=:red; beginangle=0, endangle=360)
θ = beginangle:0.1:endangle
x = r.*cosd.(θ)
y = r.*sind.(θ)
plot!(ox .+ x, oy .+ y, color=color, linewidth=0.5)
end;
function point(x, y, string="", color=:green, position=:left, vertical=:top; mark=true)
mark && scatter!([x], [y], color=color, markerstrokewidth=0)
annotate!(x, y, text(string, 10, position, color, vertical))
end;
function segment(x1, y1, x2, y2, color=:black; linestyle=:solid, linewidth=0.5)
plot!([x1, x2], [y1, y2], color=color, linestyle=linestyle, linewidth=linewidth)
end
function draw(more=false)
pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
plot([0, 80, 80, 0], [0, 0, 60, 0], xlims=(-5, 85), ylims=(-5, 65))
circle(48, 16, 16)
circle(80 - 12, 36, 12)
x3, y3 = 48 .* [0.6, 0.8]
segment(80, 0, 80 - x3, y3, :green)
if more
plot!(showaxis=false)
x1, y1 = 48 .* [0.8, 0.6]
segment(48, 16, x1, y1)
segment(48, 16, 48, 0)
x2, y2 = 32 .* [0.6, 0.8]
segment(48, 16, 80 - x2, y2)
x4, y4 = 12 .* [0.8, 0.6]
segment(80 - 12, 36, 80, 36)
segment(80 - 12, 36, 80 - 12 - x4, 36 - y4)
x5, y5 = 12 .* [0.6, 0.8]
segment(80 - 12, 36, 80 - 12 - x5, 36 + y5)
point(x1, y1, " e", :blue)
point(80-x2, y2, "f ", :blue, :right)
point(48, 0, "g ", :blue, :right)
point(80-x3, y3, "D ", :blue, :right)
point(80 - 12 - x4, 36 - y4, "h ", :blue, :right)
point(80 - 12 - x5, 36 + y5, " i", :blue)
point(80, 36, " k", :blue)
point(0, 0, "A ", :blue, :right)
point(80, 0, " B", :blue)
point(80, 60, " C", :blue)
point(48, 16, " O1\n R1=16", :blue)
point(80-12, 36, " O2\n R2=12", :blue)
end
end;