算額(その1160)
九八 鴻巣市三ツ木山王 三木神社 明治28年(1895)
埼玉県立図書館:埼玉県史料集 第二集『埼玉の算額』,昭和44年,誠美堂印刷所,埼玉県与野市.
キーワード:円4個,半円1個,斜線2本
半円の中に 2 本の斜線を引き,甲円,乙円,丙円を容れる。丙円の直径が 1 寸のとき,乙円の直径はいかほどか。
半円の半径と中心座標を R, (0, 0); R = 2r1
甲円の半径と中心座標を r1, (0, r1)
乙円の半径と中心座標を r2, (x2, r2); r2 = r1/2
丙円の半径と中心座標を r3, (0, R - r3)
半円の端点から乙円への接線と半円の交点座標を (x0, sqrt(R^2 - x0^2))
とおき,以下の連立方程式を解くが,いくつかのパラメータは簡単な関係式を満たす。
「問」は丙円の直径が既知で,乙円の直径を求めよとなっているが,図を描く手順は以下のようにするのがよい。
まず甲円は外円の 1/2 倍,乙円の 2 倍である。半円の端点から乙円への接線を引き,この接線に接するように r3 を決める。
R = 2r1,r2 = r1/2,x2 = √2r1 なので(eq1, eq3 を解けば求まる),実質求めなければならないのは x0, r1 の 2 つである。
include("julia-source.txt")
using SymPy
@syms R::positive, r1::positive, r2::positive, x2::positive,
r3::positive, y3::positive, x0::positive
R = 2r1
r2 = r1/2
x2 = √Sym(2)r1
eq1 = x2^2 + (r1 - r2)^2 - (r1 + r2)^2 |> expand
eq3 = 4R^2 - 16R*r2
eq4 = dist2(x0, sqrt(R^2 - x0^2), -R, 0, x2, r2, r2)
eq5 = dist2(x0, sqrt(R^2 - x0^2), -R, 0, 0, R - r3, r3);
二元連立方程式ではあるが,SymPy では解けないので,まず x0 に付いて解き,それをもう一方の式に代入して r1 を求める。
ans_x0 = solve(eq4, x0)[2]
ans_x0 = ans_x0 |> sympy.sqrtdenest |> simplify |> factor
ans_x0 |> println
42*r1*(-35 + 384*sqrt(2))/12769
eq5 = eq5(x0 => ans_x0) |> simplify;
@syms d
ans_r1 = solve(eq5, r1)[1] |> apart |> factor
ans_r1 |> println
8*r3*(1 + 2*sqrt(2))/21
ans_x0 = ans_x0(r1 => ans_r1) |> simplify
ans_x0 |> println
16*r3*(314*sqrt(2) + 1501)/12769
乙円の半径は,甲円の半径の 1/2 である。
ans_r2 = ans_r1/2
ans_r2 |> println
4*r3*(1 + 2*sqrt(2))/21
乙円の半径 r2 は,丙円の半径 r3 の (4 + 8√2)/21 倍である。
丙円の直径が 1 寸の解き,乙円の直径は 0.7292242142373696 寸である。
「術」,「答」では (√56 + 7)/21 = 0.6896816558832325 寸としているが,誤りであろう。それでは図を描けない(不適切な図になる)。
その他のパラメータは以下の通りである。
R = 1.45845; r1 = 0.729224; r2 = 0.364612; x0 = 1.21862; x2 = 1.03128
function draw(r3, more=false)
pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
#(r1, r2, x0, x2) = res[1]
r1 = 8*r3*(1 + 2*sqrt(2))/21
x0 = 16*r3*(314*sqrt(2) + 1501)/12769
R = 2r1
r2 = r1/2
x2 = √2r1
R = 2r1
@printf("R = %g; r1 = %g; r2 = %g; x0 = %g; x2 = %g\n", R, r1, r2, x0, x2)
plot()
circle(0, 0, R, beginangle=0, endangle=180)
circle(0, r1, r1, :magenta)
circle(0, R - r3, r3, :orange)
circle2(x2, r2, r2, :blue)
segment(-R, 0, x0, sqrt(R^2 - x0^2), :green)
segment(R, 0, -x0, sqrt(R^2 - x0^2), :green)
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, "甲円:r1,(0,r1)", :magenta, :center, delta=-delta/2)
point(x2, r2, "乙円:r2,(x2,r2)", :blue, :center, delta=-delta/2)
point(0, R - r3, "丙円:r3,(0,R-r3)", :orange, :center, delta=-delta/2)
point(x0, sqrt(R^2 - x0^2), "(x0,√(R^2-x0^2))", :green, :right, :bottom, delta=delta/2)
point(R, 0, " R", :red, :left, :bottom, delta=delta/2)
point(0, R, " R", :red, :left, :bottom, delta=delta/2)
end
end;