算額(その248)
中村信弥「改訂増補 長野県の算額」
http://www.wasan.jp/zoho/zoho.html
県内の算額3(229)
長野県諏訪市下諏訪 諏訪大社下社 慶応4年(1868)
長方形内に大円 1 個,中円,小円がそれぞれ 4 個入っている。大円の径が 1 寸のとき,長方形の長辺の長さはいかほどか。
長方形の長辺,短辺の長さをそれぞれ x,y とする。
第 1 象限の図形を対象とする。
大円の中心を原点とする。
大円の半径,中心座標を r1, (0, 0) とする。y = 2r1 である。
中円の半径,中心座標を r2, (x/2 - r2, y/2 - r2) とする。
小円の半径,中心座標を r3, (x/2 - r3, r3) とする。
問では「大円の径が 1 寸のとき」としているが,術では大円と長方形の長辺の関係を述べているので,以下では r1 も変数として連立方程式を解く。解は,r1 を含む式になる。
include("julia-source.txt");
using SymPy
@syms r1::positive, r2::positive, r3::positive,
x::positive, y::positive;
r1 = 1//2
y = 2r1
eq1 = (x/2 - r2)^2 + (y/2 - r2)^2 - (r1 + r2)^2
eq2 = (x/2 - r3)^2 + r3^2 - (r1 + r3)^2
eq3 = (r2 - r3)^2 + (y/2 - r2 - r3)^2 - (r2 + r3)^2;
res = solve([eq1, eq2, eq3], [r2, r3, x])
1-element Vector{Tuple{Sym, Sym, Sym}}:
(4*sqrt(2)*r1/49 + 9*r1/49, 4*r1*(11 - 6*sqrt(2))/49, 2*r1*(23/49 + 32*sqrt(2)/49))
r1 = 0.5 とすると
r1 = 0.50000; r2 = 0.14956; r3 = 0.10264; x = 1.39296; y = 1.00000
長辺の長さは 1.39296 である。
x は 2\*r1\*(23/49 + 32\*sqrt(2)/49) である。2r1 は大円の直径(径)であるので, x は 大円の径の (23//49 + 32\*sqrt(Sym(2))/49) 倍である。
2*r1*(23//49 + 32*sqrt(Sym(2))/49) |> simplify |> println
2*r1*(23 + 32*sqrt(2))/49
術は「2048 の平方根に,23 を加え,大円の径を掛けて,49 で割る」
(sqrt(Sym(2048)) + 23) * 2r1 / 49 |> println
2*r1*(23 + 32*sqrt(2))/49
同じである。
using Plots
using Printf
function draw(more)
pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
r1 = 1/2
y = 2r1
(r2, r3, x) = (4*sqrt(2)*r1/49 + 9*r1/49, 4*r1*(11 - 6*sqrt(2))/49, 2*r1*(23/49 + 32*sqrt(2)/49))
@printf("r1 = %.5f; r2 = %.5f; r3 = %.5f; x = %.5f; y = %.5f\n", r1, r2, r3, x, y)
plot([x/2, x/2, -x/2, -x/2, x/2], [-y/2, y/2, y/2, -y/2, -y/2], color=:black, lw=0.5)
circle(0, 0, r1)
circle4(x/2 - r2, y/2 - r2, r2, :blue)
circle4(x/2 - r3, r3, r3, :green)
if more == true
point(0, 0, " 大円", :red, :left, :bottom)
point(x/2 - r2, y/2 - r2, "中円", :blue, :left)
point(x/2 - r3, r3, "小円", :green, :left)
point(x/2, y/2, "(x/2,y/2)", :black, :right, :bottom)
hline!([0], color=:black, lw=0.5)
vline!([0], color=:black, lw=0.5)
else
plot!(showaxis=false)
end
end;