Retour

Source : courbes.mp

courbes.mp
verbatimtex 
%&latex 
\documentclass{article} 
\usepackage{amsmath,amssymb} 
\begin{document} 
etex 
defaultfont:="cmmi8"; 
path Cb[]; 
numeric u,c,e,pi; 
u=1cm; 
pi=3.141592654; 
e=2.718281828; 
c=57.29578; % conversion d'un radian en degrés 
color rouge,vert,bleu,jaune,noir,blanc,orange,rose,violet,ciel,orangevif; 
rouge=(1,0,0); 
bleu=(0,0,1); 
noir=(0,0,0); 
blanc=(1,1,1); 
orange=(1, 0.5, 0); 
violet=(0.9, 0.1, 0.9); 
rose=(1,0.7,0.7); 
ciel=0.9*(0.25,1,1); 
orangevif=(1,0.25,0.1); 
vert=(1,1,1)-violet; 
jaune= (0.9,0.9,0.2); 
 
%papier millimétré 
vardef millimetre suffix co = 
 color coul; 
 numeric hauteur, largeur ; 
 path p[]; 
 %ligne horizontale 
 p1:=(x.so*cm, 0)--(x.ne*cm, 0); 
 %ligne verticale 
 p2:=(0,y.so*cm)--(0,y.ne*cm); 
 %choix de la couleur 
 if str co ="" : 
 coul:= orange 
 else : 
 coul:=co 
 fi; 
 %grille millimétrique 
 pickup pencircle scaled 0.2; 
 %lignes horizontales 
 for i:=y.so step 0.1 until y.ne : 
 draw p1 shifted (0,i*cm) withcolor coul; 
 endfor; 
 %lignes verticales 
 for i:=x.so step 0.1 until x.ne : 
 draw p2 shifted (i*cm,0) withcolor coul; 
 endfor; 
 %grille demi-centimétrique 
 pickup pencircle scaled 0.5; 
 %lignes horizontales 
 for i:=y.so step 0.5 until y.ne: 
 draw p1 shifted (0,i*cm) withcolor coul; 
 endfor; 
 %lignes verticales 
 for i:=x.so step 0.5 until x.ne : 
 draw p2 shifted (i*cm,0) withcolor coul; 
 endfor; 
 %grille centimétrique 
 pickup pencircle scaled 0.7; 
 %lignes horizontales 
 for i:=y.so step 1 until y.ne: 
 draw p1 shifted (0,i*cm) withcolor coul; 
 endfor; 
 %lignes verticales 
 for i:=x.so step 1 until x.ne : 
 draw p2 shifted (i*cm,0) withcolor coul; 
 endfor; 
 %grille penta-centimétrique 
 %lignes horizontales 
 pickup pencircle scaled 1; 
 for i:=0 step -5 until y.so : 
 draw p1 shifted (0,i*cm) withcolor coul; 
 endfor; 
 for i:=0 step 5 until y.ne : 
 draw p1 shifted (0,i*cm) withcolor coul; 
 endfor; 
 %lignesverticales 
 for i:=0 step -5 until x.so : 
 draw p2 shifted (i*cm,0) withcolor coul; 
 endfor; 
 for i:=0 step 5 until x.ne : 
 draw p2 shifted (i*cm,0) withcolor coul; 
 endfor; 
enddef; 
 
%graduation de l 'axe des x 
vardef graduationx suffix inc = 
 x.ne:=x.ne+0.2; y.ne:=y.ne+0.2; 
 label.llft( "O",(0,0)) ; 
 label.rt( btex $x$ etex,(x.ne*cm,0)) ; 
 pickup pencircle scaled 0.5; 
 if str inc ="" : 
 inc=1 
 fi; 
 if inc<>0 : 
 for i:=x.so*cm step inc*x.u until x.ne*cm : 
 if abs(i)>0.09 : 
 draw (i,-0.7*mm)--(i,0.7*mm); 
 label.bot( format("%3g",decimal(i/x.u)),(i,0)) 
 fi; 
 endfor 
 fi; 
 x.so:=x.so-0.2; 
 drawarrow (x.so*cm,0)--(x.ne*cm,0); 
 label.lft( btex $x'$ etex,(x.so*cm,0)) ; 
enddef; 
 
%graduation de l 'axe des y 
vardef graduationy suffix inc = 
 label.top( btex $y$ etex,(0,y.ne*cm)) ; 
 pickup pencircle scaled 0.5; 
 if str inc ="" : 
 inc=1 
 fi; 
 if inc<>0 : 
 for i:=y.so*cm step inc*y.u until y.ne*cm: 
 if abs(i)>0.09 : draw (-0.7*mm,i)--(0.7*mm,i); 
 label.lft( format("%3g",decimal(i/y.u)) ,(0,i)) 
 fi ; 
 endfor 
 fi; 
 y.so:=y.so-0.2; 
 drawarrow (0,y.so*cm)--(0,y.ne*cm); 
 label.bot( btex $y'$ etex,(0,y.so*cm)) ; 
enddef; 
 
%découpage de la courbe ci-dessous selon les limites du graphique 
def limite = 
 cutafter (z.so*cm--(x.ne,y.so)*cm--z.ne*cm--(x.so,y.ne)*cm--cycle) 
 cutbefore (z.so*cm--(x.ne,y.so)*cm--z.ne*cm--(x.so,y.ne)*cm--cycle) 
enddef; 
 
%tracé de la courbe joignant les nb points (x.i,y.i) 
% x.i varie de a à b et y.i est calulé par la macro ordonnée@# 
vardef courbe[](expr a,b,nb ) suffix co = 
 for i:=0 upto nb : 
 x@[i]:=(a+i*(b-a)/nb); 
 x:=x@[i]; 
 ordonnee@(i); % calcul de l'ordonnée du point d'indice i 
 endfor ; 
 Cb@:= (x@.0*x.u,y@.0*y.u) 
 for i:=1 upto nb : 
 ..(x@[i]*x.u,y@[i]*y.u) 
 endfor; 
 Cb@:=Cb@ limite; 
 if str co <>"" : 
 draw Cb@ withcolor co 
 fi; 
enddef; 
 
vardef param[](expr a,b,nb ) suffix co= 
 for i:=0 upto nb : 
 t@[i]:= (a+i*(b-a)/nb) ; 
 coordonnees@(i); 
 endfor; 
 Cb@:= (x@.0*x.u,y@.0*y.u) 
 for i:=1 upto nb : 
 ..(x@[i]*x.u,y@[i]*y.u) 
 endfor; 
 Cb@:=Cb@ limite; 
 if str co <>"" : 
 draw Cb@ withcolor co 
 fi; 
enddef; 
 
%etiquettage de la courbe Cb@# 
vardef labelise@#(expr a)( suffix pos ) suffix co = 
 numeric t; 
 pair pt,tangent; 
 color coul; 
 if str co ="" : 
 coul:= noir 
 else : 
 coul:=co 
 fi; 
 if str pos ="" : 
 t:= 0.5*length Cb@# 
 else : 
 t:=pos*length Cb@# 
 fi; 
 pt:= point t of Cb@#; 
 tangent:= unitvector(direction t of Cb@#); 
 label(a rotated angle(tangent),pt+2mm*(tangent rotated 90)) withcolor coul; 
enddef; 
 
vardef sin(expr t) = sind(c*t) enddef; 
 
vardef cos(expr t) = cosd(c*t) enddef; 
 
vardef exp(expr t) = e**t enddef; 
 
input graph; 
 
courbes.mp (figure 1)
beginfig(1); 
%unité sur l'axe des abscisses 
x.u:=10cm; 
%unité sur l'axe des ordonnées 
y.u:=10cm; 
% coordonnées du coin inférieur gauche en cm 
z.so=(0,0); 
% coordonnées du coin supérieur droit en cm 
z.ne=(11,11); 
%papier millimétré de couleur @ , orange si vide, 
millimetre orange; 
%graduation de l'axe des abscisses de x.so à x.ne avec incrément 1 par défaut si suffixe @ vide 
% sinon @*x.u; si @=0 pas de graduation. 
graduationx 0.1 ; 
%graduation de l'axe des ordonnées de y.so à y.ne avec incrément 1 par défaut si suffixe @ vide 
% sinon @*y.u; si @=0 pas de graduation. 
graduationy 0.1 ; 
 
vardef ordonnee[](expr i) = 
 numeric x; 
 x:=x@[i]; 
 y@[i]:= 
 % définition des fonctions dont on veut obtenir la courbe représentative. 
 if @=1: x 
 elseif @=2 : x**2 
 elseif @=3 : x**3 
 elseif @=4 : x**4 
 elseif @=5 : sqrt(x) 
 elseif @=6 : x**5 
 elseif @=7 : x**6 
 elseif @=8 : 0.2/x 
 elseif @=9 : 1/(10*x) 
 elseif @=10: 
 fi 
enddef; 
 
% définition des courbes en paramétrique. 
vardef coordonnees[](expr i) = 
 numeric t; 
 t:=t@[i]; 
 z@[i] = 
 if @=11: ( 5*cos(t) , 5*sin(t)) 
 elseif @=12: (t**4,t) 
 elseif @=13 :(t**3, t) 
 elseif @=14 :( t**6, t) 
 elseif @=15 : ( t**5, t) 
 elseif @=16 :( t**7, t) 
 elseif @=17 : (exp(t), t) 
 elseif @=18 :( , ) 
 elseif @=19 :( , ) 
 elseif @=20 :( , ) 
 fi 
enddef ; 
 
pickup pencircle scaled 0.4; 
courbe1(-0.1,1.4,100) bleu;labelise1(btex \footnotesize $y=x$ etex)(0.35)bleu ; 
courbe5(0.001,1.4,100) rouge; labelise5(btex \footnotesize $y=\sqrt{x}$ etex)(0.27)rouge ; 
courbe2(-0.3,1.4,100) rouge ;labelise2(btex \footnotesize $y=x^2$ etex)(0.47)rouge; 
courbe3(-0.3,1.4,100) vert; labelise3(btex \footnotesize $y=x^3$ etex)(0.58)vert; 
param13(-0.3,1.6,100) vert; labelise13(btex \footnotesize $y=\sqrt[3]{x}$ etex)(0.62)vert; 
courbe4(-0.3,1.6,100) ciel; labelise4(btex \footnotesize $y=x^4$ etex)(0.645)ciel; 
param12(-0.3,1.6,100) ciel; labelise12(btex \footnotesize $y=\sqrt[4]{x}$ etex)(0.68)ciel; 
courbe6(-0.3,1.6,100) violet; labelise6(btex \footnotesize $y=x^5$ etex)(0.705)violet; 
param15(-0.3,1.6,100) violet; labelise15(btex \footnotesize $y=\sqrt[5]{x}$ etex)(0.73)violet; 
courbe7(-0.3,1.6,100) noir; labelise7(btex \footnotesize $y=x^6$ etex)(0.75); 
param14(-0.3,1.6,100)noir ;labelise14(btex \footnotesize $y=\sqrt[6]{x}$ etex)(0.77); 
courbe9(0.02,1.6,100)rouge;labelise9(btex \footnotesize $ y=\dfrac{4}{100x} $ etex )(0.8)rouge; 
endfig;
end