算額(その518)
村松茂清: 『算俎』,寛文3年(1663)
一関市博物館>>和算に挑戦>>平成23年度出題問題&解答例>>平成23年度出題問題(2)[中級問題]
https://www.city.ichinoseki.iwate.jp/museum/wasan/h23/normal.html
正三角形内に等円 3 個が内接している。等円の直径が 10 のとき,黒積 A, B の面積を求めよ。
等円の半径が r,正三角形の一辺の長さが 2a とする。
include("julia-source.txt");
using SymPy
@syms a, r
eq = r - (a - r)/sqrt(Sym(3))
a = solve(eq, a)[1]
a |> println
r*(1 + sqrt(3))
正三角形の一辺の長さは等円の半径の 1 + √3 倍である。
r = 5; a = 13.6603; 等円の直径 = 10; 正三角形の一辺の長さ = 27.3205
黒積 A は,「底辺 (a - r),高さ r の直角三角形から,半径 r の円の面積の 1/6 を引いたもの」の 2 倍である。
-r^2*(pi - 3*sqrt(3))/3 = (√3 - π/3)r^2
2((a - r)r/2 - PI*r^2/6) |> factor |> println
-r^2*(pi - 3*sqrt(3))/3
黒積 B は,3個の等円の中心を結んでできる正三角形の面積から,半径が r の円の面積の半分(円/6 の 3 個分)を引いたものである。
-r^2*(pi - 2*sqrt(3))/2 = (√3 - π/2)r^2
2r * √Sym(3)r/2 - PI*r^2/2 |> factor |> println
-r^2*(pi - 2*sqrt(3))/2
function black(r, a)
x = vcat([cosd(θ)r for θ in 240:300], [cosd(θ)r + r for θ in 120:180], [cosd(θ)r - r for θ in 0:60])
y = vcat([sind(θ)r + (1 + √3)r for θ in 240:300], [sind(θ)r + r for θ in 120:180], [sind(θ)r + r for θ in 0:60])
plot!(x, y, color=:black, lw=0.5, seriestype=:shape, fillcolor=:black, alpha=0.5)
x = vcat([cosd(θ)r + r for θ in 270:390], [a, r])
y = vcat([sind(θ)r + r for θ in 270:390], [0, 0])
plot!(x, y, color=:black, lw=0.5, seriestype=:shape, fillcolor=:black, alpha=0.5)
end;
function draw(more=false)
pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
r = 10//2
a = (1 + √3)r
@printf("r = %g; a = %g; 等円の直径 = %g; 正三角形の一辺の長さ = %g\n", r, a, 2r, 2a)
plot([a, 0, -a, a], [0, √3a, 0, 0], color=:blue, lw=0.5)
circle(r, r, r)
circle(-r, r, r)
circle(0, (1 + √3)r, r)
black(r, a)
plot!([r, 0, -r, r], r .+ [0, √3r, 0, 0], color=:green, lw=0.5)
plot!([r, r, a, r], [0, r, 0, 0], color=:magenta, lw=0.5)
if more
delta = (fontheight = (ylims()[2]- ylims()[1]) / 500 * 10 * 2) /3 # size[2] * fontsize * 2
hline!([0], color=:black, lw=0.5)
vline!([0], color=:black, lw=0.5)
point(0.15r, 1.5r, "B", :black, mark=false)
point(1.6r, 0.5r, "A", :black, mark=false)
point(a, 0, " a", :blue, :left, :bottom, delta=delta/2)
point(0, √3a, " √3a", :blue, :left, :vcenter)
point(0, (1 + √3)r, " (1+√3)r", :red, :left, :vcenter)
point(r, r, " (r,r)", :red, :left, :vcenter)
end
end;
※コメント投稿者のブログIDはブログ作成者のみに通知されます