算額(その365)
山形県山形市小白川町 天満社
山形算額勝負-湯殿山神社を目指せ-
https://www.sci.yamagata-u.ac.jp/wasan/pdf/20180711SSEP.pdf
正方形内に大小の正三角形と甲円,乙円がある。甲円の直径が与えられたときに,乙円の直径を求めよ。
正方形の辺の長さを a とする。
甲円の半径と中心座標を r1, (x1, r1)
容円の半径と中心座標を r2, (a - r2, y2)
とする。
以下の連立方程式を解く。a = 1 としても乙円と甲円の比を求める場合には一般性を失わない。
include("julia-source.txt");
using SymPy
@syms r1::positive, x1::positive, r2::positive,
y2::positive, a::positive;
a = 1
eq1 = distance(0, 0, a/2, sqrt(Sym(3))a/2, x1, r1) - r1^2
eq2 = distance(0, (sqrt(Sym(3)) - 1)a, (sqrt(Sym(3)) - 1)a, 0, x1, r1) - r1^2
eq3 = distance(a, 0, a/2, sqrt(Sym(3))a/2, a - r2, y2) - r2^2
eq4 = distance(a, a, (sqrt(Sym(3)) - 1)a, 0, a - r2, y2) - r2^2
res = solve([eq1, eq2, eq3, eq4], (r1, x1, r2, y2))
4-element Vector{NTuple{4, Sym}}:
((-11 - 19*sqrt(3)/3)*(-1/2 - sqrt(-10*sqrt(3) - sqrt(6)*sqrt(97 - 56*sqrt(3)) + 35/2) + sqrt(3)/2)^2 + (-1 + sqrt(3)/3)*(-1/2 - sqrt(-10*sqrt(3) - sqrt(6)*sqrt(97 - 56*sqrt(3)) + 35/2) + sqrt(3)/2) + (19*sqrt(3)/3 + 11)*(-1/2 - sqrt(-10*sqrt(3) - sqrt(6)*sqrt(97 - 56*sqrt(3)) + 35/2) + sqrt(3)/2)^3 + sqrt(3), -1/2 - sqrt(-10*sqrt(3) - sqrt(6)*sqrt(97 - 56*sqrt(3)) + 35/2) + sqrt(3)/2, (-22 - 10*sqrt(3))*(1/2 - sqrt(-sqrt(3)/8 - sqrt(2 - sqrt(3))/4 + 3/8))^2 + 1/2 + (1/2 - sqrt(-sqrt(3)/8 - sqrt(2 - sqrt(3))/4 + 3/8))^3*(8*sqrt(3) + 16) + (1/2 - sqrt(-sqrt(3)/8 - sqrt(2 - sqrt(3))/4 + 3/8))*(2*sqrt(3) + 5), 1/2 - sqrt(-sqrt(3)/8 - sqrt(2 - sqrt(3))/4 + 3/8))
((-11 - 19*sqrt(3)/3)*(-1/2 - sqrt(-10*sqrt(3) - sqrt(6)*sqrt(97 - 56*sqrt(3)) + 35/2) + sqrt(3)/2)^2 + (-1 + sqrt(3)/3)*(-1/2 - sqrt(-10*sqrt(3) - sqrt(6)*sqrt(97 - 56*sqrt(3)) + 35/2) + sqrt(3)/2) + (19*sqrt(3)/3 + 11)*(-1/2 - sqrt(-10*sqrt(3) - sqrt(6)*sqrt(97 - 56*sqrt(3)) + 35/2) + sqrt(3)/2)^3 + sqrt(3), -1/2 - sqrt(-10*sqrt(3) - sqrt(6)*sqrt(97 - 56*sqrt(3)) + 35/2) + sqrt(3)/2, (-22 - 10*sqrt(3))*(1/2 + sqrt(-sqrt(3)/8 + sqrt(2 - sqrt(3))/4 + 3/8))^2 + 1/2 + (1/2 + sqrt(-sqrt(3)/8 + sqrt(2 - sqrt(3))/4 + 3/8))*(2*sqrt(3) + 5) + (1/2 + sqrt(-sqrt(3)/8 + sqrt(2 - sqrt(3))/4 + 3/8))^3*(8*sqrt(3) + 16), 1/2 + sqrt(-sqrt(3)/8 + sqrt(2 - sqrt(3))/4 + 3/8))
((-11 - 19*sqrt(3)/3)*(-1/2 + sqrt(-10*sqrt(3) + sqrt(6)*sqrt(97 - 56*sqrt(3)) + 35/2) + sqrt(3)/2)^2 + (-1 + sqrt(3)/3)*(-1/2 + sqrt(-10*sqrt(3) + sqrt(6)*sqrt(97 - 56*sqrt(3)) + 35/2) + sqrt(3)/2) + sqrt(3) + (19*sqrt(3)/3 + 11)*(-1/2 + sqrt(-10*sqrt(3) + sqrt(6)*sqrt(97 - 56*sqrt(3)) + 35/2) + sqrt(3)/2)^3, -1/2 + sqrt(-10*sqrt(3) + sqrt(6)*sqrt(97 - 56*sqrt(3)) + 35/2) + sqrt(3)/2, (-22 - 10*sqrt(3))*(1/2 - sqrt(-sqrt(3)/8 - sqrt(2 - sqrt(3))/4 + 3/8))^2 + 1/2 + (1/2 - sqrt(-sqrt(3)/8 - sqrt(2 - sqrt(3))/4 + 3/8))^3*(8*sqrt(3) + 16) + (1/2 - sqrt(-sqrt(3)/8 - sqrt(2 - sqrt(3))/4 + 3/8))*(2*sqrt(3) + 5), 1/2 - sqrt(-sqrt(3)/8 - sqrt(2 - sqrt(3))/4 + 3/8))
((-11 - 19*sqrt(3)/3)*(-1/2 + sqrt(-10*sqrt(3) + sqrt(6)*sqrt(97 - 56*sqrt(3)) + 35/2) + sqrt(3)/2)^2 + (-1 + sqrt(3)/3)*(-1/2 + sqrt(-10*sqrt(3) + sqrt(6)*sqrt(97 - 56*sqrt(3)) + 35/2) + sqrt(3)/2) + sqrt(3) + (19*sqrt(3)/3 + 11)*(-1/2 + sqrt(-10*sqrt(3) + sqrt(6)*sqrt(97 - 56*sqrt(3)) + 35/2) + sqrt(3)/2)^3, -1/2 + sqrt(-10*sqrt(3) + sqrt(6)*sqrt(97 - 56*sqrt(3)) + 35/2) + sqrt(3)/2, (-22 - 10*sqrt(3))*(1/2 + sqrt(-sqrt(3)/8 + sqrt(2 - sqrt(3))/4 + 3/8))^2 + 1/2 + (1/2 + sqrt(-sqrt(3)/8 + sqrt(2 - sqrt(3))/4 + 3/8))*(2*sqrt(3) + 5) + (1/2 + sqrt(-sqrt(3)/8 + sqrt(2 - sqrt(3))/4 + 3/8))^3*(8*sqrt(3) + 16), 1/2 + sqrt(-sqrt(3)/8 + sqrt(2 - sqrt(3))/4 + 3/8))
1 番目のものが適解である。
甲円の半径
res[1][1] |> println
(-11 - 19*sqrt(3)/3)*(-1/2 - sqrt(-10*sqrt(3) - sqrt(6)*sqrt(97 - 56*sqrt(3)) + 35/2) + sqrt(3)/2)^2 + (-1 + sqrt(3)/3)*(-1/2 - sqrt(-10*sqrt(3) - sqrt(6)*sqrt(97 - 56*sqrt(3)) + 35/2) + sqrt(3)/2) + (19*sqrt(3)/3 + 11)*(-1/2 - sqrt(-10*sqrt(3) - sqrt(6)*sqrt(97 - 56*sqrt(3)) + 35/2) + sqrt(3)/2)^3 + sqrt(3)
乙円の半径
res[1][3] |> println
(-22 - 10*sqrt(3))*(1/2 - sqrt(-sqrt(3)/8 - sqrt(2 - sqrt(3))/4 + 3/8))^2 + 1/2 + (1/2 - sqrt(-sqrt(3)/8 - sqrt(2 - sqrt(3))/4 + 3/8))^3*(8*sqrt(3) + 16) + (1/2 - sqrt(-sqrt(3)/8 - sqrt(2 - sqrt(3))/4 + 3/8))*(2*sqrt(3) + 5)
甲円と乙円の式は複雑で長いが,二重根号を外して簡約化すると短い式になる。
r1 = res[1][1] |> sympy.sqrtdenest |> simplify
r2 = res[1][3] |> sympy.sqrtdenest |> simplify
r1 |> println
r2 |> println
-sqrt(2) - 1/2 + sqrt(3)/2 + sqrt(6)/2
-sqrt(2)/2 - 1/4 + sqrt(3)/4 + sqrt(6)/4
乙円の半径 / 甲円の半径 を求める。
r2/r1 |> simplify |> println
1/2
乙円の直径は甲円の直径の 1/2 である。
a = 1; r1 = 0.176557; r2 = 0.0882784; r2/r1 = 0.5
x1, y2 も簡単な式になる。
res[1][2] |> sympy.sqrtdenest |> simplify |> println
res[1][4] |> sympy.sqrtdenest |> simplify |> println
-sqrt(6) - sqrt(3)/2 + 3/2 + 3*sqrt(2)/2
-sqrt(2)/4 + 1/4 + sqrt(3)/4
using Plots
function draw(more)
pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
a = 1
(r1, x1, r2, y2) = res[1]
@printf("a = %g; r1 = %g; r2 = %g; r2/r1 = %g\n", a, r1, r2, r2/r1)
plot([0, a, a, 0, 0], [0, 0, a, a, 0], color=:black, lw=0.5)
plot!([a, 0, (√3 - 1)a, a], [a, (√3 - 1)a, 0, a], color=:blue, lw=0.5)
plot!([0, a, a/2, 0], [0, 0, √3a/2], color=:red, lw=0.5)
circle(x1, r1, r1, :magenta)
circle(a - r2, y2, r2, :green)
if more
delta = (fontheight = (ylims()[2]- ylims()[1]) / 500 * 10 * 2) /3 # size[2] * fontsize * 2
r3m1a = (√3 - 1)a
point(0, r3m1a, " (√3-1)a", :blue, :left, :vcenter)
point(r3m1a, 0, " (√3-1)a", :blue, :left, :bottom)
point(a, 0, " a", :blue, :left, :bottom)
point(0, a, " a", :blue, :left, :bottom)
point(a/2, √3a/2, "(a/2,√3a/2)", :red, :right, :bottom)
point(x1, r1, "甲円:r1,(x1,r1)", :magenta, :center, delta=-delta/2)
point(a - r2, y2, "乙円:r2\n(a-r2,y2)", :green, :center, delta=2.3delta)
hline!([0], color=:black, lw=0.5)
vline!([0], color=:black, lw=0.5)
else
plot!(showaxis=false)
end
end;