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