Animation une étape tracé
Author: JCL

r = Function(2.0 + cos(x) - 0.5 * cos(3.0 * x) + 0.45 * sin(9.0 * x) - 0.3 * cos(5.0 * x), -10.0, 10.0)
t = 3.653 (slider from -0.1 to 6.29, step 0.0010)
M: (r(t) * cos(t), r(t) * sin(t))
h = 0.0010 (slider from 0.0010 to 1, step 0.0010)
L: (r(t - h) * cos(t - h), r(t - h) * sin(t - h))
N: (r(t + h) * cos(t + h), r(t + h) * sin(t + h))
Tp = Ray(M, N)
Tm = Ray(M, L)
C = Circle(L, M, N)
O = Center(C)
R = Radius(C)
l = 0.05 (slider from 0 to 0.1, step 0.01)
M': M + l / R^(2.0) * Vector[M, O]
Γ = CurveCartesian(r(t) * cos(t), r(t) * sin(t), t, 0.0, 6.29)
c_M = Vector(M, M')
Lm: (r(t - 2.0 * h) * cos(t - 2.0 * h), r(t - 2.0 * h) * sin(t - 2.0 * h))
Np: (r(t + 2.0 * h) * cos(t + 2.0 * h), r(t + 2.0 * h) * sin(t + 2.0 * h))
Cm = Circle(Lm, L, M)
Cp = Circle(M, N, Np)
Om = Center(Cm)
Op = Center(Cp)
Rm = Radius(Cm)
Rp = Radius(Cp)
L': L + l / Rm^(2.0) * Vector[L, Om]
N': N + l / Rp^(2.0) * Vector[N, Op]
D = Circle(L', M', N')
O' = Center(D)
R' = Radius(D)
M'': M' + l / R'^(2.0) * Vector[M', O']