La développée d'une ellipse

Animation flash


developpee1.mp
%@DATE: 7 juin 2005
 
input fichierps;
input cadres;
 
InitFichierPS(-200,-200,200,200);
 
path cadre;
cadre = CadreAvecBordsArrondis(400,400,20) shifted (-200,-200);
u := 1.6cm;
 
verbatimtex
%&latex
\documentclass[12pt]{article}
\usepackage[latin1]{inputenc}
\usepackage[frenchb]{babel}
\usepackage[bitstream-charter]{mathdesign}
\everymath{\displaystyle}
\begin{document}
etex
 
 
%% Macros pour une détermination directe de la courbure sans passer par un 
%% paramétrage de la développée.
vardef pt(expr c,t) =		% Point de la courbe c, le paramétrage est
    point (t*length(c)) of c 	% réduit à l'intervalle [0,1].
enddef;
vardef phi(expr c,t) =		% Angle phi « sous » la tangente.
    0.017453*angle(direction (t*length(c)) of c)
enddef;
vardef Tf(expr c,t) =		% Vecteur T du repère de Frenet.
    unitvector(direction (t*length(c)) of c)
enddef;
vardef Nf(expr c,t) =		% Vecteur N du repère de Frenet.
    Tf(c,t) rotated 90
enddef;
vardef courbure(expr c,t) =	% Approximation de la courbure, c = d(phi)/d(s).
    (phi(c,t+0.001)-phi(c,t)) / abs(pt(c,t+0.001)-pt(c,t))
enddef;			
%% ----------------------------------------------------------------------------
 
 
%% L'ellipse et sa développée comme chemins.
path ellipse,d;
ellipse = fullcircle xscaled 4u yscaled 3u;
 
%% Le fond fixe de l'animation.
picture pict;
pict := image(
    fill cadre 
	withcolor 0.8white;
    draw cadre scaled 0.95 
	withpen pencircle scaled 2
	withcolor 0.5white;
    label(btex \large Développée d'une ellipse etex scaled 1.5,(0,170));
    label(btex \it (lieu des centres de courbure) etex,(0,150));
    label(btex \begin{minipage}{10cm}
	    \textbf{Paramétrages}\\
	    -- ellipse: $x= a\cos t$, $y=b\sin t$ \\[1mm]
	    -- développée: $x=\frac{a^2-b^2}a \cos^3t$, 
			   $y=\frac{b^2-a^2}b\sin^3t$
	    \end{minipage} 
	  etex scaled 1.25,(0,-150)) withcolor (0.7,0.13,0.13);
    fill ellipse withcolor 1.3(.2,.2,.7);
    draw ellipse 
	withpen pencircle scaled 2
	withcolor (0,0,.5);
    );
 
%% Les points variables, M sur l'ellipse, O sur la développée.
pair M,O;
 
%% Le nombre de vues.
n = 100;
 
%% La boucle ...
for i = 0 upto n:
 beginfig(i);
 
    draw pict;
 
    M := pt(ellipse,i/(n+1));
    c := courbure(ellipse,i/(n+1));
    O := M + (1/c)*Nf(ellipse,i/(n+1));
 
    draw ellipse 
	withpen pencircle scaled 2
	withcolor (0,0,.5);
 
    draw fullcircle scaled (2/c) shifted O
	withpen pencircle scaled 2
	withcolor white;
 
    draw O--M withcolor .8white;
 
    if i=0:
	d := O;
    else:
	d := d -- O;
	draw d withpen pencircle scaled 2 withcolor (1,1,0);
    fi;
 
 endfig;
endfor;
 
end