算額(その535)
和算図形問題あれこれ - 令和3年11月の問題?
https://gunmawasan.web.fc2.com/kongetu-no-mondai.html
直線上で等円2個を交差させ,その間に甲円 7 個と乙円 1 個を入れる。甲円の直径から乙円の直径を求める式を導け。
中央の甲円の中心を原点とする。
等円の半径と中心座標を r0, (x0, 0), (-x0, 0)
甲円の半径を r1
上 2 個の甲円の中心座標を (x00, r0 - r1), (-x00, r0 - r1)
右端の甲円の中心座標を (x0 + r0 - r1, 0)
乙円の半径と中心座標を r2, (0, r2 - r0)
とおき,以下の連立方程式を解く。
x00 ≠ x0 であることに注意!!
include("julia-source.txt");
using SymPy
@syms r0, x0, x00, r1, r2
eq1 = (x0 + x00)^2 + (r0 - r1)^2 - (r0 + r1)^2
eq2 = x0^2 + (r2 - r0)^2 - (r0 + r2)^2
eq3 = (x0 + r0 - r1 - x00)^2 + (r0 - r1)^2 - (2r1)^2
eq4 = x0 - r0 + r1
res = solve([eq1, eq2, eq3, eq4], (x0, x00, r0, r2))
4-element Vector{NTuple{4, Sym}}:
(0, -2*r1, r1, 0)
(0, 2*r1, r1, 0)
(4*r1*(2 - 3*sqrt(6))/25, -8*sqrt(6)*r1/25 + 22*r1/25, 3*r1*(11 - 4*sqrt(6))/25, r1*(16*sqrt(6)/75 + 56/75))
(4*r1*(2 + 3*sqrt(6))/25, 8*sqrt(6)*r1/25 + 22*r1/25, 3*r1*(4*sqrt(6) + 11)/25, r1*(56/75 - 16*sqrt(6)/75))
4 組の解が得られるが,4 番目の解が適解である。
乙円の直径は甲円の直径の (56 - 16√6)/75 ≒ 0.22410885487292206 倍である。
(56 - 16√6)/75
0.22410885487292206
その他のパラメータは以下の通り。
r1 = 1; x0 = 1.49576; x00 = 1.66384; r0 = 2.49576; r2 = 0.224109
function draw(more=false)
pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
r1 = 1
(x0, x00, r0, r2) = (4*r1*(2 + 3*sqrt(6))/25, 8*sqrt(6)*r1/25 + 22*r1/25, 3*r1*(4*sqrt(6) + 11)/25, r1*(56/75 - 16*sqrt(6)/75))
@printf("r1 = %g; x0 = %g; x00 = %g; r0 = %g; r2 = %g\n", r1, x0, x00, r0, r2)
plot()
circle(x0, 0, r0, :blue)
circle(-x0, 0, r0, :blue)
circle4(x00, r0 - r1, r1)
circle(0, 0, r1)
circle(x0 + r0 - r1, 0, r1)
circle(-x0 - r0 + r1, 0, r1)
circle(0, r2 - r0, r2, :green)
if more
delta = (fontheight = (ylims()[2]- ylims()[1]) / 500 * 10 * 2) /3 # size[2] * fontsize * 2
hline!([0, -r0], color=:black, lw=0.5)
vline!([0], color=:black, lw=0.5)
point(x0, 0, "x0", :blue, :center, delta=-delta)
point(-x0, 0, "-x0", :blue, :center, delta=-delta)
point(x00, r0 - r1, "甲円:r1\n(x00,r0-r1)", :red, :center, delta=-delta)
point(-x00, r0 - r1, "(-x00,r0-r1)", :red, :center, delta=-delta)
point(x0 + r0 - r1, 0, "(x0+r0-r1,0)", :red, :center, delta=-delta)
point(0, r2 - r0, " 乙円:r2,(0,r2-r0)", :black, :left, :bottom, delta=2delta)
end
end;