算額(その610)
高山忠直編: 算法評論
国立国会図書館 デジタルコレクション
https://dl.ndl.go.jp/pid/3508431/1/10
外円内に弦を引き,等円を 4 個配置する。
外円の直径が与えられたとき等円の直径を求めよ。
外円の半径と中心座標を R, (0, 0)
等円の半径と中心座標を r, (0, R - r), (x, y); y = 3r - R
とおき,連立方程式を解く。
include("julia-source.txt");
using SymPy
@syms R::positive, r::positive, x::positive, y::negative
y = 2r - R + r
eq1 = x^2 + y^2 - (R - r)^2
eq2 = x^2 + (R - r - y)^2 - 4r^2
res = solve([eq1, eq2], (r, x));
res[1][1] |> simplify |> println
res[1][2] |> simplify |> println
R*(3 - sqrt(5))/2
R*sqrt(-22 + 10*sqrt(5))
等円の半径は外円の半径の (3 - √5)/2 倍である。
例えば,外円の直径が 987 のとき,等円の直径は 377.0004531038537 である。
987*(3 - √5)/2
377.0004531038537
その他のパラメータは以下の通り。
等円の直径 = 754.001; x = 592.759; y = 144.001; R = 987
function draw(more=false)
pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
R = 987
(r, x) = R .* ((3 - sqrt(5))/2, sqrt(-22 + 10*sqrt(5)))
y = 2r - R + r
@printf("等円の直径 = %g; x = %g; y = %g; R = %g\n", 2r, x, y, R)
plot()
circle(0, 0, R)
circle(0, R - r, r, :blue)
circle(0, r - R, r, :blue)
circle(x, y, r, :blue)
circle(-x, y, r, :blue)
x0 = sqrt(R^2 - (2r - R)^2)
segment(-x0, 2r - R, x0, 2r - R, :magenta)
if more
delta = (fontheight = (ylims()[2]- ylims()[1]) / 500 * 10 * 2) /3 # size[2] * fontsize * 2
hline!([0], color=:black, lw=0.5)
vline!([0], color=:black, lw=0.5)
point(0, R, " R", :red, :left, :bottom, delta=delta/2)
point(0, R - r, " R-r", :blue, :left, :vcenter)
point(0, r - R, " r-R", :blue, :left, :vcenter)
point(0, 2r - R, " 2r-R", :blue, :left, :bottom, delta=delta/2)
point(x, y, "等円:r,(x,y)", :blue, :center, :top, delta=-delta)
end
end;
※コメント投稿者のブログIDはブログ作成者のみに通知されます