%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