Type of figure:

This text is displayed if your browser does not support HTML5 Canvas.

Octave/MATLAB code for experimentation:

Contents of file poncelet.m:

function psi = poncelet(b, c, phi, nHops)
    psi = zeros(nHops+1, 1);
    psi(1) = phi;
    for k=1:nHops
        beta = atan2(b*sin(phi), 1.0 - b*cos(phi));
        p = norm([b*sin(phi), 1.0 - b*cos(phi)]);
        xi = asin(c/p);
        phi = phi + pi + 2*(beta-xi);
        psi(k+1) = phi;
    end
    ang = linspace(-pi, pi, 1001);
    ca = cos(ang);
    sa = sin(ang);
    plot(ca, sa, 'b', b+c*ca, c*sa, 'm', cos(psi), sin(psi), 'r');
    axis('equal');
    grid on;

% Try each of the following.
%    poncelet(0.5, 0.2432, pi, 5)
%    poncelet(0.5, 0.1773, pi, 7)
%    poncelet(0.5, 0.2967, pi, 8)
%    poncelet(0.5, 0.3750, pi, 3)
%    poncelet(0.4, 0.5515, pi, 4)
%
% The third argument can be varied in each case to see that the
% polygon is still closed.