%======================Fonctions usuelles========================================== numeric Pi,E; Pi:= 3.14159; E:= 2.71828; vardef sin(expr x) = sind(x/Pi*180) enddef; vardef cos(expr x) = cosd(x/Pi*180) enddef; vardef tan(expr x) = sin(x)/cos(x) enddef; vardef exp(expr x) = mexp(x*256) enddef; vardef ln(expr x) = mlog(x)/256 enddef; % Définition du repère =================================================== def repere(expr Ox,Oy,Xmin,Xmax,Ymin,Ymax,Ux,Uy) = % affectations des variables _ox := Ox ; _oy := Oy ; _ux := Ux ; _uy := Uy; _xmin := Xmin ; _xmax := Xmax ; _ymin := Ymin ; _ymax := Ymax; _r_xmin := _xmin*_ux+_ox; % l'abscisse minimale _r_xmax := _xmax*_ux+_ox; %l'abscisse maximale _r_ymin := _ymin*_uy+_oy; %l'ordonnée minimale _r_ymax := _ymax*_uy+_oy %l'ordonnée maximale enddef; % Placer les axes du repère ============================================== def r_axes = drawarrow (_r_xmin,_oy)..(_r_xmax,_oy); drawarrow (_ox,_r_ymin)..(_ox,_r_ymax); label.bot(btex $x$ etex, (_r_xmax-1mm,_oy)); label.lft(btex $y$ etex, (_ox,_r_ymax-1mm)) enddef; % Placer l'origine ======================================================= def r_origine = label.lft(btex $O$ etex,(_ox,_oy-2mm)); pickup pencircle scaled 3pt; draw (_ox,_oy); pickup pencircle scaled 0.5pt enddef; %Graduation des unités =================================================== def r_unites = draw (_ox+_ux,_oy-1mm)--(_ox+_ux,_oy+1mm); draw(_ox-1mm,_oy+_uy)--(_ox+1mm,_oy+_uy) enddef; %Définir un point dans ce plan =========================================== def r_point(expr x,y) = (_ox+x*_ux,_oy+y*_uy) enddef; %Graduation des axes ===================================================== def grad_x(expr n) = for i=0 upto (_xmax-_xmin)/n-1: draw (_r_xmin+i*n*_ux,_oy-1mm)--(_r_xmin+i*n*_ux,_oy+1mm); endfor enddef; def grad_y(expr n) = for i=0 upto (_ymax-_ymin)/n-1: draw (_ox-1mm,_r_ymin+i*n*_uy)--(_ox+1mm,_r_ymin+i*n*_uy); endfor enddef; %Quadrillage=============================================================== def quad_x(expr n) = numeric _a,_b,_c,_d; _a = floor(_xmin)*_ux+_ox; _b = floor(_ymin)*_uy+_oy; _c = (floor(_xmax)+1)*_ux+_ox; _d = (floor(_ymax)+1)*_uy+_oy; pickup pencircle scaled 0.01pt; for i=0 upto (floor(_xmax)+1-floor(_xmin))/n -1: draw (_a+i*n*_ux,_b)--(_a+i*n*_ux,_d); endfor pickup pencircle scaled 0.5pt; for i=0 upto (floor(_xmax)+1-floor(_xmin)) -1: draw (_a+i*_ux,_b)--(_a+i*_ux,_d); endfor enddef; def quad_y(expr n) = numeric _a,_b,_c,_d; _a = floor(_xmin)*_ux+_ox; _b = floor(_ymin)*_uy+_oy; _c = (floor(_xmax)+1)*_ux+_ox; _d = (floor(_ymax)+1)*_uy+_oy; pickup pencircle scaled 0.01pt; for i=0 upto (floor(_ymax)+1-floor(_ymin))/n -1: draw (_a,_b+i*n*_uy)--(_c,_b+i*n*_uy); endfor pickup pencircle scaled 0.5pt; for i=0 upto (floor(_ymax)+1-floor(_ymin)) -1: draw (_a,_b+i*_uy)--(_c,_b+i*_uy); endfor enddef; %Placer un point plein dans ce repère ==================================== def r_ppoint(expr x,y) = pickup pencircle scaled 3pt; draw (_ox+x*_ux,_oy+y*_uy); pickup pencircle scaled 0.5pt enddef; %Placer un point creux dans ce repère ==================================== def r_cpoint(expr x,y) = path _e; _e = fullcircle scaled 3pt shifted(_ox+x*_ux,_oy+y*_uy); draw _e; fill _e withcolor white enddef; %Label des unités ======================================================== def r_labelxy = label.bot(btex {$+1$} etex,(_ox+_ux,_oy-1mm)); label.lft(btex {$+1$} etex, (_ox-1mm,_oy+_uy)) enddef; %Definr un segment ================================================ def r_segment(expr a,b,c,d) = (_ox+a*_ux,_oy+b*_uy)--(_ox+c*_ux,_oy+d*_uy) enddef; %Definir une droite // à l'axe des ordonnées ============================= def rx_droite(expr k) = (_ox+k*_ux,_r_ymin)--(_ox+k*_ux,_r_ymax) enddef; %Definir une droite définie par un point et son coeff dir ================ def r_droitedir(expr a,b,m) = (_r_xmin,_oy+(m*_xmin+b-m*a)*_uy)--(_r_xmax,_oy+(m*_xmax+b-m*a)*_uy) enddef; %Projection d'un point sur les axes ====================================== def r_point_proj(expr x,y) = draw(_ox+x*_ux,_oy)--(_ox+x*_ux,_oy+y*_uy)--(_ox,_oy+y*_uy) dashed evenly enddef; %On enlève ce qui sort du repère ========================================= def r_fin = clip currentpicture to (_r_xmin,_r_ymin)--(_r_xmin,_r_ymax)-- (_r_xmax,_r_ymax)--(_r_xmax,_r_ymin)--cycle enddef; %Tracer des courbes en dimension 2 ======================================= %definition de f def fx(expr t) = 5*(cos(t)**3) enddef; def fy(expr t) = 5*(sin(t)**3) enddef; def f_point(expr t) = r_point(fx(t),fy(t)) enddef; def f_courbe(expr ti,tf,n) = f_point(ti) for i=1 upto n: ...f_point(ti+(i/n)*(tf-ti)) endfor enddef; %=========================================================================== %definition de g def gx(expr t) = (5/sqrt(2))*(cos(t)*cos(2*t)) enddef; def gy(expr t) = (5/sqrt(2))*(sin(t)*cos(2*t)) enddef; def g_point(expr t) = r_point(gx(t),gy(t)) enddef; def g_courbe(expr ti,tf,n) = g_point(ti) for i=1 upto n: ...g_point(ti+(i/n)*(tf-ti)) endfor enddef; %=========================================================================== beginfig(1); path p,q; repere(0,0,-6,6,-6,6,1cm,1cm); quad_x(0.1); quad_y(0.1); r_axes; r_origine; r_unites; grad_x(1); grad_y(1); r_labelxy; p = f_courbe(0,7,100); q = g_courbe(0,7,100); draw p withcolor red withpen pencircle scaled 1.2pt; draw q withcolor blue withpen pencircle scaled 1.2pt; r_fin; endfig; end