%@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