Update.
[petittracer.git] / MathTracer.mod
1 IMPLEMENTATION MODULE MathTracer;
2
3 FROM MathLib0 IMPORT sqrt;
4
5 (*TYPE
6
7   SCALAIRE= REAL; (* pour passer éventuellement en LONGREAL *)
8
9   (* Le type VECTEUR sera utilisé pour les vecteurs mais aussi pour les
10      points *)
11   VECTEUR= ARRAY[0..2] OF SCALAIRE;*)
12
13 PROCEDURE Carre(x: SCALAIRE): SCALAIRE;
14 BEGIN
15   RETURN x*x;
16 END Carre;
17
18 (* Normalise ramène la norme d'un vecteur à 1 *)
19
20 (* - Vecteur: Vecteur que l'on doit normaliser *)
21
22 PROCEDURE Normalise(VAR Vecteur: VECTEUR);
23 VAR
24   Module: SCALAIRE;
25 BEGIN
26   Module:=sqrt(Vecteur[0]*Vecteur[0]+
27                Vecteur[1]*Vecteur[1]+
28                Vecteur[2]*Vecteur[2]);
29   IF Module>0.0 THEN
30     Vecteur[0]:=Vecteur[0]/Module;
31     Vecteur[1]:=Vecteur[1]/Module;
32     Vecteur[2]:=Vecteur[2]/Module;
33   END;
34 END Normalise;
35
36 (* Homotetie fait subir une homotetie vectorielle à un vecteur *)
37
38 (* - Coefficient: Facteur de l'homotétie
39    - Vecteur: Vecteur qui subit l'opération *)
40
41 PROCEDURE Homotetie(Coefficient: SCALAIRE; VAR Vecteur: VECTEUR);
42 BEGIN
43   Vecteur[0]:=Vecteur[0]*Coefficient;
44   Vecteur[1]:=Vecteur[1]*Coefficient;
45   Vecteur[2]:=Vecteur[2]*Coefficient;
46 END Homotetie;
47
48 PROCEDURE SoustraitVecteur(VAR V1, V2: VECTEUR);
49 BEGIN
50   V2[0]:=V2[0]-V1[0]; V2[1]:=V2[1]-V1[1]; V2[2]:=V2[2]-V1[2];
51 END SoustraitVecteur;
52
53 PROCEDURE Norme(VAR V: VECTEUR): SCALAIRE;
54 BEGIN
55   RETURN sqrt(V[0]*V[0]+V[1]*V[1]+V[2]*V[2]);
56 END Norme;
57
58 PROCEDURE Distance(VAR V1, V2: VECTEUR): SCALAIRE;
59 BEGIN
60   RETURN sqrt((V1[0]-V2[0])*(V1[0]-V2[0])+
61               (V1[1]-V2[1])*(V1[1]-V2[1])+
62               (V1[2]-V2[2])*(V1[2]-V2[2]));
63 END Distance;
64
65 PROCEDURE Parite(x: SCALAIRE): BOOLEAN;
66 BEGIN
67   IF x>=0.0 THEN
68     RETURN NOT(ODD(LONGINT(x)));
69   ELSE
70     RETURN ODD(LONGINT(x));
71   END;
72 END Parite;
73
74 PROCEDURE Ent(x: SCALAIRE): SCALAIRE;
75 BEGIN
76   IF x>=0.0 THEN
77     RETURN REAL(LONGINT(x));
78   ELSE
79     RETURN REAL(LONGINT(x))-1.0;
80   END;
81 END Ent;
82
83 PROCEDURE Frac(x: SCALAIRE): SCALAIRE;
84 BEGIN
85   RETURN x-Ent(x);
86 END Frac;
87
88 PROCEDURE Abs(x: SCALAIRE): SCALAIRE;
89 BEGIN
90   IF x>=0.0 THEN
91     RETURN x;
92   ELSE
93     RETURN -x;
94   END;
95 END Abs;
96
97 END MathTracer.