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;