%FSTYLE{/syracuse/fabrique/styles/fabmetapost.css} %AUTEUR{Jean-Michel Sarlat} %MAIL{jsarlat@planete.net} %DATE{14 novembre 2002} %TITRE{Une cardioïde qui roule ...} %P{Se représenter la trajectoire du point de rebroussement d'une cardioïde qui roule sans glisser sur une droite ne manque pas de piquant. Les calculs sont simples et surtout c'est l'occasion d'apprécier, une fois de plus, §gMetaPost§ pour la facilité avec laquelle on peut illustrer ce mouvement.} FICHIER:courbes.mp:*: FICHIER:trajectoire1.mp: 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; path cardioide; 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 qui roule et la trajectoire du point de % rebroussement. for i=0 upto 36: draw cardioide rotatedaround (rpoint(fx(10*i),fy(10*i)),-(15*i)) shifted rvecteur(4*(1-cosd(5*i))-fx(10*i),-fy(10*i)); draw rpoint(0,0) rotatedaround (rpoint(fx(10*i),fy(10*i)),-(15*i)) shifted rvecteur(4*(1-cosd(5*i))-fx(10*i),-fy(10*i)) withpen pencircle scaled 4pt withcolor red; endfor; endfig; end § %S{Une figure pour commencer} TAG:1 M:mp2html: mp="trajectoire1.mp" html="trajectoire1.html" EXEC:log:Images.pl -t1.5 -i2 -F trajectoire1.png trajectoire1.mp %IMG{align=center}{trajectoire1.png} EXEC:log:Mp2html.pl -F courbes.html courbes.mp %P{Les fichiers : §lcourbes.mp§courbes.mp§ (§lcourbes.html§HTML§) -- §ltrajectoire1.mp§trajectoire1.mp§} %S{La détermination} TAG:2 FICHIER:demonstration.mp: 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 § %SS{La figure} M:mp2html: mp="demonstration.mp" html="demonstration.html" %P{Le fichier : §ldemonstration.mp§demonstration.mp§} EXEC:log:Images.pl -t1.5 -F demonstration.png demonstration.mp %IMG{align=center}{demonstration.png} TAG:3 FICHIER:macros.sty:*: FICHIER:demo1.tex: Sur la figure la cardioïde est représentée à l'instant initial et à un instant ... suivant. Le point $M$ au contact est tel que la distance $OM$ mesurée sur la droite de base est égale à la longueur de l'arc (en vert) qui sépare $M$ du point de rebroussement. La position initiale du point $M$ est représentée par $M_0$, la transformation qui permet de passer de la première cardioïde à la seconde est donc une rotation autour de $M_0$ composée avec la translation de vecteur $\vect{M_0M}$. L'angle de la rotation est tel qu'elle doit emmener en coïncidence les deux bases de Frenet (représentées en rouge). § M:texel: fichier="demo1" patron="jms_sty_01" %SS{Les calculs} FICHIER:demo2.tex: Ici le plus commode est d'utiliser les coordonnées polaires. Pour la cardioïde: $$r=1-\cos\theta$$ Soit $\theta_0$ l'angle polaire du point $M_0$. La longueur de l'arc $OM_0$ est égale à: $$l_0=\int_0^{\theta_0}\sqrt{r'^2+r^2}d\theta = 4\left(1-\cos\frac{\theta_0}2\right)$$ L'angle $V_0$ que fait le premier vecteur de Frenet avec la direction polaire vérifie: $$\tan V_0 = \frac{r}{r'}=\tan\frac{\theta_0}{2}$$ L'angle de rotation de la base de Frenet par rapport à la base du repère (que l'on retrouve en $M$ au moment du contact) est donc $$\theta_0+\frac12\theta_0=\frac32\theta_0$$ La transformation qui permet le passage de la première à la seconde cardioïde est défini analytiquement par $$\matrice{x'\cr y'}= \matrice{\cos\frac{3\theta_0}2 & \sin\frac{3\theta_0}2\cr -\sin\frac{3\theta_0}2 & \cos\frac{3\theta_0}2} \matrice{x-(1-\cos\theta_0)\cos\theta_0\cr y-(1-\cos\theta_0)\sin\theta_0} + \matrice{4(1-\cos\frac{\theta_0}2)\cr 0}$$ § M:texel: fichier="demo2" patron="jms_sty_01" %SS{La trajectoire du point de rebroussement} FICHIER:demo3.tex: La position de $O$ dans le mouvement est obtenue en faisant $x=0$ et $y=0$ dans l'égalité précédente. L'arc décrit par $O$ est donc paramétré de la façon suivante: $$\theta\longrightarrow \left( 4-(5-\cos\theta)\cos\frac{\theta}2, (1-\cos\theta)\sin\frac{\theta}2\right)$$ § M:texel: fichier="demo3" TAG:4 FICHIER:trajectoire2.mp: input courbes; vardef fx(expr t) = 4-(5-cosd(t))*cosd(t/2) enddef; vardef fy(expr t) = (1-cosd(t))*sind(t/2) enddef; path trajectoire; beginfig(1); % Le repère à priori repere(15cm,15cm,4cm,2cm,1cm,1cm); % Le chemin définissant la trajectoire de O trajectoire := ftrace(0,360,100) en_place; % La base de roulement draw ((-3,0)--(11,0)) en_place withpen pencircle scaled 2pt; draw trajectoire withpen pencircle scaled 4pt withcolor red; endfig; end § M:mp2html: mp="trajectoire2.mp" html="trajectoire2.html" %P{Le fichier : §ltrajectoire2.mp§trajectoire2.mp§} EXEC:log:Images.pl -t1.5 -F trajectoire2.png trajectoire2.mp %IMG{align=center}{trajectoire2.png} TAG:5 %S{L'animation} %P{Elle est obtenue en adaptant un §ipeu§ le code de la première figure.} FICHIER:trajectoire.mp: 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; % Le repère à priori repere(15cm,15cm,4cm,2cm,1cm,1cm); % Le chemin définissant la cardioïde path cardioide; cardioide := (ftrace(0,360,100)..cycle) en_place; % Le cadre de la figure path cadre; cadre := ((-3,-2)--(11,-2)--(11,4)--(-3,4)--cycle) en_place; for i=0 upto 36: beginfig(i+1); fill cadre withcolor .6*white; draw ((-3,0)--(11,0)) en_place withpen pencircle scaled 2pt; fill cardioide rotatedaround (rpoint(fx(10*i),fy(10*i)),-(15*i)) shifted rvecteur(4*(1-cosd(5*i))-fx(10*i),-fy(10*i)) withcolor red+green; draw rpoint(0,0) rotatedaround (rpoint(fx(10*i),fy(10*i)),-(15*i)) shifted rvecteur(4*(1-cosd(5*i))-fx(10*i),-fy(10*i)) withpen pencircle scaled 4pt withcolor red; endfig; endfor; end § <[ ]> M:mp2html: mp="trajectoire.mp" html="trajectoire.html" TAG:6 EXEC:log:Images.pl -i2 -A -r animpng trajectoire.mp M:animpngjs: repertoire="animpng" titre="Cardioïde qui roule ..." <[ Voir l'animation ]> %%EOF