1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
|
FUNCTION Det2V(V1, V2: Ve2D): Reel;
VAR p, q: Reel;
BEGIN
p:= V1.x * V2.y; q:= V1.y * V2.x;
Det2V:= p - q
END;
FUNCTION Pscal2V(V1, V2: Ve2D): Reel;
VAR Px, Py: Reel;
BEGIN
Px:= V1.x * V2.x; Py:= V1.y * V2.y;
Pscal2V:= Px + Py
END;
FUNCTION Norme1(V1: Ve2D): Reel;
VAR X2, Y2: Reel;
BEGIN
X2:= Sqr(V1.x); Y2:= Sqr(V1.y);
Norme1:= Sqrt(X2 + Y2)
END;
FUNCTION AnglePol(W1, W2: Ve2D): Reel;
VAR De, N1, N2, N1N2, Ps, u, v: Reel;
BEGIN
N1:= Norme1(W1); N2:= Norme1(W2); N1N2:= N1 * N2;
De:= Det2V(W1, W2); Ps:= Pscal2V(W1, W2);
IF (Abs(De)<Abs(Ps))
THEN BEGIN
u:= ArcSin(De / N1N2);
IF (Ps>0) THEN v:= u
ELSE IF (u>0) THEN v:= Pi - u
ELSE v:= -u - Pi
END
ELSE BEGIN
u:= ArcCos(Ps / N1N2);
IF (De>0) THEN v:= u
ELSE v:= -u
END;
AnglePol:= v
END;
FUNCTION Enlacement(W: Ve2D; L_: LstV): Z_08;
CONST D_Pi = 2 * Pi;
VAR i, j: Byte; Aij, Arot, s: Reel; Wi, Wj:Ve2D;
BEGIN
Arot:= 0;
FOR i:= 1 TO Npoint DO
BEGIN
j:= i + 1; IF (j>Npoint) THEN j:= 1;
Wi.x:= L_[i].x - W.x; Wi.y:= L_[i].y - W.y;
Wj.x:= L_[j].x - W.x; Wj.y:= L_[j].y - W.y;
Aij:= AnglePol(Wi, Wj); s:= Arot + Aij;
Arot:= s
END;
Enlacement:= Round(Arot / D_Pi)
END; |
Partager