Number of moving circles:
Contents of file steiner.m:
function steiner(n, k, L, phi) s = sin(pi/n); b = s / (1 + s); a = 1 - b; r = a - b; circSpec = zeros(n+2, 3); phiStep = 2*pi/n; ang = linspace(-pi, pi, 1001); ca = cos(ang); sa = sin(ang); figure(1); plot(ca, sa, 'b', r*ca, r*sa, 'k'); rho = L; s = k; den = rho*rho - s*s; circSpec(1, :) = [rho/den, 0, s/den]; s = k*r; den = rho*rho - s*s; circSpec(2, :) = [rho/den, 0, s/den]; hold on; for idx = 1:n cp = cos(phi); sp = sin(phi); cx = a*cp; cy = a*sp; x0 = L + k * cx; y0 = k * cy; rho = norm([y0, x0]); salph = y0 / rho; calph = x0 / rho; s = k*b; den = rho*rho - s*s; rho = rho/den; circSpec(idx+2, :) = [calph*rho, salph*rho, s/den]; plot(cx + b*ca, cy + b*sa, 'g'); phi = phi + phiStep; end hold off; axis('equal'); grid on; figure(2); x = circSpec(1,1) + circSpec(1,3)*ca; y = circSpec(1,2) + circSpec(1,3)*sa; plot(x, y, 'b'); hold on; x = circSpec(2,1) + circSpec(2,3)*ca; y = circSpec(2,2) + circSpec(2,3)*sa; plot(x, y, 'k'); for idx = 1:n x = circSpec(idx+2, 1) + circSpec(idx+2, 3)*ca; y = circSpec(idx+2, 2) + circSpec(idx+2, 3)*sa; plot(x, y, 'g'); end hold off; axis('equal'); grid on;