算額(その105)
福島県船引町 蚕養国神社 明治24年(1891)2月
http://www.wasan.jp/fukusima/kogaikuni.html
直線の上に 2 種類の円が 3 個ずつある。下の小円の中心間の距離(子)を 1 とすると,大円の径はいくつか。
図のように記号を定め,方程式を解く。方程式中に分数が出てくると計算時間がかかりすぎるので,子を 2 とし,各円の半径について方程式を立てる。
using SymPy
@syms r1::positive, r2::positive, y1::positive;
eq1 = r1^2 + (2r1 + r2 - y1)^2 - (r1 + r2)^2;
eq2 = (r1 - 1)^2 + (y1 - r2)^2 - (r1 + r2)^2;
eq3 = 1 + (r1 - r2)^2 - (r1 + r2)^2;
solve([eq1, eq2, eq3], (r1, r2, y1))
1-element Vector{Tuple{Sym, Sym, Sym}}:
(1, 1/4, 3/2)
大円の半径は 1,直径は 2 である。子と大円の直径が同じである。子が 1 なら,大円の直径は 1 である。
算額では答えとして,「大円径4寸」とあるが,その左の「術」では「子が大円の径」と書いてある。「術」のほうが正しい。
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, color=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 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")
(r1, r2, y1) = (1, 1/4, 3/2)
plot()
circle(0, r1, r1, :blue)
circle(-r1, y1, r1, :blue)
circle(r1, y1, r1, :blue)
circle(0, 2r1 + r2, r2)
circle(1, r2, r2)
circle(-1, r2, r2)
hline!([0], color=:black, lw=0.5)
if more
point(0, r1, " r1", :blue)
point(r1, y1, "(r1,y1)", :blue)
point(0, y1, " y1", :blue)
point(0, 2r1 + r2, " 2r1+r2", :red)
point(1, r2, " (1,r2)", :red)
vline!([0], color=:black, lw=0.5)
end
end;
※コメント投稿者のブログIDはブログ作成者のみに通知されます