算額(その291)
中村信弥「改訂増補 長野県の算額」
http://www.wasan.jp/zoho/zoho.html
県内の算額(281)
長野県中野市片塩 大徳寺 天保9年(1838)
上下の甲円は外接しそれぞれ左右の甲円にも外接している。乙円 2 個は互いに外接し,下の甲円と容円および左右の甲円に外接している。容円は上の甲円に内接している。
甲円の直径が 125 寸のとき,容円の直径を求めよ。
半径,中心座標を以下のように決める。
甲円 r1, (0, r1), (x1, 0)
乙円 r2, (r2, y2)
容円 r3, (0, 2r1 - r3)
r1 = 125/2 であるが,r1 も未知数として以下の連立方程式を解き(x1, r2, y2, r3) を求める(それぞれの式に r1 が含まれる)。
include("julia-source.txt");
using SymPy
@syms r1::positive, x1::positive, r2::positive, y2::positive, r3::positive;
r1 = 125/2
eq1 = x1^2 + r1^2 - 4r1^2
eq2 = r2^2 + (2r1 -r3 -y2)^2 - (r2 + r3)^2
eq3 = r2^2 + (y2 + r1)^2 - (r1 + r2)^2
eq4 = (x1 - r2)^2 + y2^2 - (r1 + r2)^2
res = solve([eq1, eq2, eq3, eq4], (x1, r2, y2, r3))
1-element Vector{NTuple{4, Sym}}:
(sqrt(3)*r1, r1*(-92*sqrt(-11013 + 12723*sqrt(3)) - 86*sqrt(-3671 + 4241*sqrt(3)) + 4499 + 8998*sqrt(3))/13497, r1*(-13497 - 4499*sqrt(3) + 86*sqrt(-11013 + 12723*sqrt(3)) + 276*sqrt(-3671 + 4241*sqrt(3)))/13497, r1*(-sqrt(-58736/167281 + 67856*sqrt(3)/167281) - 62*sqrt(3)/409 + 627/409))
x1 = 108.25318; r2 = 24.13163; y2 = 20.70279; r3 = 42.34994
容円の直径(2r3) = 84.69989
容円の半径は以下の式に甲円の半径を掛けたものになる。
@syms d
apart(res[1][4](r1 => 1), d) |> simplify
「算額への招待 追補1」 http://www.wasan.jp/syotai/syotai.html では以下の解が示されている。
A = ((1 + 2√Sym(3)) - 2sqrt(1+√Sym(3)))/3
@syms d
eq = ((12+2A+A^2) - 2(A + 2)sqrt(2A + 1))/(8 + 4A + A^2)
簡約化すると以下のようになるが,SymPy で求めた式より若干複雑である。
apart(eq, d) |> expand |> simplify
いずれにせよ,甲円の直径が 125 寸のとき,容円の直径は 84.69988610132283 寸 である。
2*(125/2 * (-4*sqrt(-3671 + 4241*sqrt(3)) - 62*sqrt(3) + 627)/409)
84.69988610132283
using Plots
function draw(more=false)
pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
r1 = 125 / 2
(x1, r2, y2, r3) = (
sqrt(3)*r1,
r1*(-92*sqrt(-11013 + 12723*sqrt(3)) - 86*sqrt(-3671 + 4241*sqrt(3)) + 4499 + 8998*sqrt(3))/13497,
r1*(-13497 - 4499*sqrt(3) + 86*sqrt(-11013 + 12723*sqrt(3)) + 276*sqrt(-3671 + 4241*sqrt(3)))/13497,
r1*(-sqrt(-58736/167281 + 67856*sqrt(3)/167281) - 62*sqrt(3)/409 + 627/409)
)
@printf("x1 = %.5f; r2 = %.5f; y2 = %.5f; r3 = %.5f\n", x1, r2, y2, r3)
@printf("容円の直径(2r3) = %.5f\n", 2r3)
plot()
circle(0, r1, r1)
circle(0, -r1, r1)
circle(x1, 0, r1)
circle(-x1, 0, r1)
circle(r2, y2, r2, :blue)
circle(-r2, y2, r2, :blue)
circle(0, 2r1 - r3, r3, :orange)
if more
point(0, r1, " r1", :red)
point(0, -r1, " -r1", :red)
point(x1, 0, " x1", :red)
point(r2, y2, "(r2,y2)", :blue, :center, :bottom)
point(0, 2r1 - r3, " 2r1-r3", :orange)
vline!([0], color=:black, lw=0.5)
hline!([0], color=:black, lw=0.5)
else
plot!(showaxis=false)
end
end;