算額(その1125)
三十四 岩手県一関市舞川相川 菅原神社後額 嘉永3年(1850)
山村善夫:現存 岩手の算額,昭和52年1月30日,熊谷印刷,盛岡市.
http://www.wasan.jp/yamamura/yamamura.html
キーワード:円1個,正三角形,正方形,斜線,黒積
正方形の中に円,正三角形,斜線を容れる。円の直径が 1 寸のとき,図で示した灰色の部分の面積(黒積)を求めよ。
正方形(正三角形)の一辺の長さを a
円の半径と中心座標を r, (r, a - r)
とおき,以下の連立方程式を解く。
include("julia-source.txt")
using SymPy
@syms r::positive, a::positive,
A::positive, B::positive, C::positive
A = 2(a - √Sym(3)a/2)
B = a
C = sqrt(A^2 + B^2)
eq = A + B - C - 2r
ans_a = solve(eq, a)[1] |> simplify
ans_a |> println
-2*r/(-3 + 2*sqrt(2 - sqrt(3)) + sqrt(3))
黒積 = ((a - A)*(B/2)/2)(a => ans_a) |> simplify;
分子の r^2 がついていると SymPy では簡約化できないので,一旦外して(係数のみにして)簡約化を試みる。
temp = 黒積/r^2
temp |> println
(-1 + sqrt(3))/(-3 + 2*sqrt(2 - sqrt(3)) + sqrt(3))^2
@syms d
temp2 = apart(temp, d) |> sympy.sqrtdenest |> factor
黒積2 = temp2*r^2
黒積2 |> println
黒積2(r => 1/2).evalf() |> println
r^2*(2*sqrt(6) + 5 + 6*sqrt(2) + 5*sqrt(3))/2
3.38056436220616
黒積は 等円の半径の二乗に,(2√6 + 5 + 6√2 +5√3)/2 を掛けることで得られる。
「答」は「三歩三分」と正解と異なる印象を受けるが,「術」は正しく,正確な結果を与えるあ。
なお,山村の解説は計算ミス・転記ミス・近似計算で正しい答えを示していない。
円径 = 1
位 = √3 - 1
A = (1 - sqrt(1 - 位))^2
黒積 = (円径/A)^2*位/4
3.380564362206166
function draw(r, more=false)
pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
a = -2*r/(-3 + 2*sqrt(2 - sqrt(3)) + sqrt(3))
黒積 = r^2*(2√6 + 5 + 6√2 +5√3)/2
@printf("円の直径が %g のとき,黒積は %g である。\n", 2r, 黒積)
plot([0, a, a, 0, 0, a, a/2, 0], [0, 0, a, a, 0, 0, √3a/2, 0], color=:blue, lw=0.5)
plot!([0, a/2, 0, 0], [0, √3a/2, (√3 - 1)a, 0], seriestype=:shape, fillcolor=:gray90)
segment(0, a - 2(a - √3a/2), a, a, :black)
circle(r, a - r, r)
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(a, 0, " a", :black, :left, :bottom, delta=delta/2)
point(0, a, "a", :black, :left, :bottom, delta=delta/2)
point(r, a - r, "r,(r,a-r)", :red, :center, delta=-delta/2)
point(a/2, √3a/2, "(a/2,√3a/2)", :blue, :right, :bottom, delta=delta/2)
point(0, (√3 - 1)a, " (√3 - 1)a", :blue, :left, delta=-delta/2)
end
end;