Ellipsographe de L'Hospital
%@DATE: 31 mai 2005
input fichierps;
InitFichierPS(-160,-150,160,150);
u = 1.2cm;
% La longueur de la tige.
l = 4;
% Angle des deux glissières;
a = 70;
ca = cosd(a);
sa = sind(a);
lx = l/sa;
% La position du point décrivant l'ellipse sur la tige.
f := 0.6;
vardef Point(expr p) =
draw p withpen pencircle scaled 4;
draw p withpen pencircle scaled 3 withcolor white;
enddef;
% L'ellipse;
path e;
for i=0 upto 200:
beginfig(i+1);
pair A,B,E;
if i<=50:
A = (i*lx/50,0) scaled u;
elseif i<=150:
A = (2lx-i*lx/50,0) scaled u;
else:
A = (i*lx/50-4lx,0) scaled u;
fi;
x := (xpart A)/u;
k := l*sqrt(1-(x/lx)*(x/lx));
if (i>50) and (i<150):
h := ca*x - k;
else:
h := ca*x + k;
fi;
B = (ca,sa) scaled (h*u);
E = f[B,A];
drawoptions(withcolor 0.6white);
draw ((-1.1l,0)--(1.1l,0)) scaled u;
draw ((-1.1l,0)--(1.1l,0)) rotated a scaled u;
drawoptions();
drawarrow (0,0)--(A scaled 0.95) withpen pencircle scaled 1.25;
if i=0:
e := E;
else:
e := e -- E;
draw e withpen pencircle scaled 1 withcolor blue;
fi
drawoptions(withpen pensquare scaled 2 withcolor (1,0.08,0.58));
draw A--B;
drawoptions();
Point(A);
Point(B);
Point(E);
endfig;
endfor;
end