算額(その219)
中村信弥「改訂増補 長野県の算額」
http://www.wasan.jp/zoho/zoho.html
県内の算額2(180) 長野県 渋薬師堂 上水内牟礼村牟礼大久保善賢氏保管 嘉永2年(1849)
外円に内接する 3 個の大円および小円,大円が交わる領域に 4 個の中円が入っている。外円の径が 14 寸のとき,大円,中円,小円の径を求めよ。
算額(その152) 岐阜県大垣市西外側町 大垣八幡神社 天保年間 を一段階複雑にしたもの
図のように記号を定め,連立方程式を解く。
外円の半径を r0 とする
右上にある小円の中心座標,半径を (x1, y1), r1
右上にある中円の中心座標,半径を (x2, y2), r2
右下にある大円の中心座標,半径を (x3, y3), r3
using SymPy
@syms r0::positive, r1::positive, r2::positive, r3::positive
r0 = 14
x1 = (r0 - r1) * cos(PI/6)
y1 = (r0 - r1) * sin(PI/6)
x2 = 2r2 * cos(PI/6)
y2 = 2r2 * sin(PI/6)
x3 = (r0 - r3) * cos(PI/6)
y3 = (r3 - r0) * sin(PI/6)
eq1 = 2r3 - r0 - r2 # 半径間の関係
eq3 = x2^2 + (r0 - r3 - y2)^2 - (r3 - r2)^2; # 中円が大円に内接
eq5 = (x1 - x3)^2 + (y1 - y3)^2 - (r1 + r3)^2; # 小円と大円が外接
r0 を与えて solve() すると,数値解が得られるが,r0 との関係がわかりにくいので,r0 を未知数のまま解くと,それぞれの解に r0 が含まれる。
res = solve([eq1, eq3, eq5], (r3, r2, r1))
1-element Vector{Tuple{Sym, Sym, Sym}}:
(3*r0/5, r0/5, r0/7)
つまり,大円,中円,小円の半径(直径)は外円の半径(直径)の 3/5, 1/5, 1/7 である。
外円の半径 = 14.000, 大円の半径 = 8.400, 中円の半径 = 2.800; 小円の半径 = 2.000
外円の径が 14 寸のとき,大円,中円,小円の径は 8寸4分,2寸8分,2寸 である。
using Plots
using Printf
function circle(ox, oy, r, color=:red; beginangle=0, endangle=360, fill=false)
θ = beginangle:0.1:endangle
x = r.*cosd.(θ)
y = r.*sind.(θ)
if fill
plot!(ox .+ x, oy .+ y, linecolor=color, linewidth=0.5, seriestype=:shape, fillcolor=color)
else
plot!(ox .+ x, oy .+ y, color=color, linewidth=0.5)
end
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 draw(more)
pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
r0 = 14
(r1, r2, r3) = (r0/7, r0/5, 3*r0/5)
x1 = (r0 - r1) * cos(PI/6)
y1 = (r0 - r1) * sin(PI/6)
x2 = 2r2 * cos(PI/6)
y2 = 2r2 * sin(PI/6)
x3 = (r0 - r3) * cos(PI/6)
y3 = (r3 - r0) * sin(PI/6)
@printf("外円の半径 = %.3f, 大円の半径 = %.3f, 中円の半径 = %.3f; 小円の半径 = %.3f\n", r0, r3, r2, r1)
plot()
circle(0, 0, r0, :blue)
circle(x1, y1, r1, :magenta)
circle(-x1, y1, r1, :magenta)
circle(0, r1 - r0, r1, :magenta)
circle(0, r0 - r3, r3, :green)
circle(x3, y3, r3, :green)
circle(-x3, y3, r3, :green)
circle(x2, y2, r2)
circle(-x2, y2, r2)
circle(0, -2r2, r2)
circle(0, 0, r2)
if more == true
point(x3, y3, " 大円(x3,y3,r3)")
point(x2, y2, " 中円(x2,y2,r2)", :red)
point(x1, y1, " 小円(x1,y1,r1)", :magenta)
hline!([0], color=:black, lw=0.5)
vline!([0], color=:black, lw=0.5)
else
plot!(showaxis=false)
end
end;