IMPLEMENTATION MODULE MathTracer; FROM MathLib0 IMPORT sqrt; (*TYPE SCALAIRE= REAL; (* pour passer éventuellement en LONGREAL *) (* Le type VECTEUR sera utilisé pour les vecteurs mais aussi pour les points *) VECTEUR= ARRAY[0..2] OF SCALAIRE;*) PROCEDURE Carre(x: SCALAIRE): SCALAIRE; BEGIN RETURN x*x; END Carre; (* Normalise ramène la norme d'un vecteur à 1 *) (* - Vecteur: Vecteur que l'on doit normaliser *) PROCEDURE Normalise(VAR Vecteur: VECTEUR); VAR Module: SCALAIRE; BEGIN Module:=sqrt(Vecteur[0]*Vecteur[0]+ Vecteur[1]*Vecteur[1]+ Vecteur[2]*Vecteur[2]); IF Module>0.0 THEN Vecteur[0]:=Vecteur[0]/Module; Vecteur[1]:=Vecteur[1]/Module; Vecteur[2]:=Vecteur[2]/Module; END; END Normalise; (* Homotetie fait subir une homotetie vectorielle à un vecteur *) (* - Coefficient: Facteur de l'homotétie - Vecteur: Vecteur qui subit l'opération *) PROCEDURE Homotetie(Coefficient: SCALAIRE; VAR Vecteur: VECTEUR); BEGIN Vecteur[0]:=Vecteur[0]*Coefficient; Vecteur[1]:=Vecteur[1]*Coefficient; Vecteur[2]:=Vecteur[2]*Coefficient; END Homotetie; PROCEDURE SoustraitVecteur(VAR V1, V2: VECTEUR); BEGIN V2[0]:=V2[0]-V1[0]; V2[1]:=V2[1]-V1[1]; V2[2]:=V2[2]-V1[2]; END SoustraitVecteur; PROCEDURE Norme(VAR V: VECTEUR): SCALAIRE; BEGIN RETURN sqrt(V[0]*V[0]+V[1]*V[1]+V[2]*V[2]); END Norme; PROCEDURE Distance(VAR V1, V2: VECTEUR): SCALAIRE; BEGIN RETURN sqrt((V1[0]-V2[0])*(V1[0]-V2[0])+ (V1[1]-V2[1])*(V1[1]-V2[1])+ (V1[2]-V2[2])*(V1[2]-V2[2])); END Distance; PROCEDURE Parite(x: SCALAIRE): BOOLEAN; BEGIN IF x>=0.0 THEN RETURN NOT(ODD(LONGINT(x))); ELSE RETURN ODD(LONGINT(x)); END; END Parite; PROCEDURE Ent(x: SCALAIRE): SCALAIRE; BEGIN IF x>=0.0 THEN RETURN REAL(LONGINT(x)); ELSE RETURN REAL(LONGINT(x))-1.0; END; END Ent; PROCEDURE Frac(x: SCALAIRE): SCALAIRE; BEGIN RETURN x-Ent(x); END Frac; PROCEDURE Abs(x: SCALAIRE): SCALAIRE; BEGIN IF x>=0.0 THEN RETURN x; ELSE RETURN -x; END; END Abs; END MathTracer.