算額(その1237)
兵庫県西宮市社家町 復元 西宮神社 天保13年(1843)
近畿数学史学会:近畿の算額「数学の絵馬を訪ねて」,平成4年5月16日 初版第一刷,大阪教育図書株式会社,大阪市.
キーワード:円5個,外円,菱形
外円の中に,菱形 1 個,天円 1 個,地円 2 個,小円 1 個を容れる。菱形の対角線の長い方が 8 寸,短い方が 6 寸のとき,小円の直径はいかほどか。
以下の図は,与えられた条件によるものではない。
菱形の対角線の長い方を a,短い方を b
外円の半径と中心座標を R, (0, 0)
天円の半径と中心座標を r1, (0, r1 - R)
地円の半径と中心座標を r2, (x2, y2)
小円の半径と中心座標を r3, (0, R - r3)
とおき,以下の連立方程式を解く。
include("julia-source.txt");
using SymPy
@syms a::positive, b::positive, R::positive, r1::positive,
r2::positive, x2::positive, y2::negative, r3::positive
R = r1 + b
eq5 = a^2 + (R - b)^2 - R^2
eq1 = dist2(0, R - 2b, a, R - b, 0, R - b, r3)
eq2 = dist2(0, R - 2b, a, R - b, x2, y2, r2)
eq3 = x2^2 + (y2 - r1 + R)^2 - (r1 + r2)^2
eq4 = x2^2 + y2^2 - (R - r2)^2;
res = solve([eq1, eq2, eq3, eq4, eq5], (r1, r2, x2, y2, r3))[2]
((a - b)*(a + b)/(2*b), b*(a - b)*(a + b)/a^2, (a - b)*(a + b)*sqrt(a^2 + b^2)/a^2, (a^2 - 3*b^2)/(2*b), a*b/sqrt(a^2 + b^2))
下図のように,菱形の対角線の長い方が 8 寸,短い方が 6 寸のとき,小円の直径は 2a*b/sqrt(a^2 + b^2) = 2.4 寸である。
「答」は「1 寸 4 分 2 厘有奇」となっているが,算額の「図」を見れば「菱形の対角線の長い方が 8 寸,短い方が 6 寸のとき」のものではない。このページの最初に掲載した図は「菱形の対角線の長い方が 8 寸,短い方が 3 寸のとき」のものである。「術」は,「(√2 - 1)*菱長*菱平/(菱長 + 菱平)」であるが,(「答」とは一致するが,)この計算式は適切とは思えない。
その他のパラメータは以下のとおりである。
a = 4; b = 3; r1 = 1.16666666666667; r2 = 1.3125; x2 = 2.1875; y2 = -1.83333333333333; r3 = 2.4
function draw(a, b, more=false)
pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
(r1, r2, x2, y2, r3) = ((a - b)*(a + b)/(2*b), b*(a - b)*(a + b)/a^2, (a - b)*(a + b)*sqrt(a^2 + b^2)/a^2, (a^2 - 3*b^2)/(2*b), a*b/sqrt(a^2 + b^2))
R = r1 + b
@printf("a = %g; b = %g; r1 = %.15g; r2 = %.15g; x2 = %.15g; y2 = %.15g; r3 = %.15g\n", a, b, r1, r2, x2, y2, r3)
plot([a, 0, -a, 0, a], [R - b, R, R - b, R - 2b, R - b], color=:green, lw=0.5)
circle(0, 0, R)
circle2(x2, y2, r2, :blue)
circle(0, r1 - R, r1, :magenta)
circle(0, R - b, r3, :orange)
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(0, r1 - R, "天円:r1,(0,r1-R)", :magenta, :center, delta=-delta/2)
point(x2, y2, "地円:r2\n(x2,y2)", :blue, :center, delta=-delta/2)
point(0, R - b, "小円:r3,(0,R-b)", :orange, :center, delta=-delta/2)
point(0, R, " R", :red, :left, :bottom, delta=delta/2)
point(a, R - b, " (a,R-b)", :green, :left, :vcenter)
end
end;
draw(8/2, 6/2, true)