input courbes; vardef rvecteur(expr x,y) = (x,y) xscaled unitex yscaled unitey enddef; vardef fx(expr t) = (1-cosd(t))*cosd(t) enddef; vardef fy(expr t) = (1-cosd(t))*sind(t) enddef; def en_mouvement (expr t) = rotatedaround (rpoint(fx(t),fy(t)),-t*1.5) shifted rvecteur(4*(1-cosd(.5*t))-fx(t),-fy(t)) enddef; def avec_aspect(expr t,c) = withpen pencircle scaled t withcolor c enddef; path cardioide,arc; numeric t; beginfig(1); % Le repère à priori repere(15cm,15cm,4cm,2cm,1cm,1cm); % Le chemin définissant la cardioïde cardioide := ftrace(0,360,100) en_place; % La base de roulement draw ((-3,0)--(11,0)) en_place withpen pencircle scaled 2pt; % La cardioïde en t=0 draw cardioide; % La cardioïde en t t:=130; draw cardioide en_mouvement(130); dotlabel.ulft(btex $O$ etex,(0,0) en_place); dotlabel.bot(btex $M$ etex,(4*(1-cosd(.5*t)),0) en_place); dotlabel.ulft(btex $M_0$ etex,(fx(t),fy(t)) en_place); % L'arc de cardioïde entre le point de rebroussement et le % point de contact. arc := ftrace(0,t,50) en_place; % --> au début draw arc avec_aspect(2pt,green); % --> à l'instant t draw arc en_mouvement(t) avec_aspect(2pt,green); % Le repère de Frenet picture frenet; frenet = image( drawarrow ((0,0)--(1,0)) en_place withcolor red; drawarrow ((0,0)--(0,1)) en_place withcolor red; ); draw frenet rotatedaround (rpoint(0,0),1.5*t) shifted rvecteur(fx(t),fy(t)); draw frenet shifted rvecteur(4*(1-cosd(.5*t)),0); endfig; end