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 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122
|
(*HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
# Utilitaires
HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH*)
PROCEDURE IncR(VAR u: Reel; v: Reel);
VAR w: Reel;
BEGIN
w:= u + v; u:= w
END;
PROCEDURE Norme1_2(u, v: Reel; VAR N1, N2: Reel);
VAR U2, V2: Reel;
BEGIN
U2:= Sqr(u); V2:= Sqr(v); N2:= U2 + V2; N1:= Sqrt(N2)
END;
(*HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
P2 / Calcul de la matrice image
F1(x) = (2*Cos(x) + 1)/3
F2(x) = (8*Cos(x) + 4*Sin(x)2 + 1)/9
F3(x) = (128*Cos(x) + 64*Sin(x)2 + 16*Sin(x)4 + 7)/135
F4(t) = (1024*Cos(t) + 512*Sin(t)2 +128*Sin(t)4 + 64*Sin(t)6 + 29)/1053
Pour k = (1, 2, 3, 4) on a:
a) Fk(0) = Fk(2*Pi) = 1 ;
b) Fk(2*Pi/3) = Fk(-2*Pi/3) = Fk(4*Pi/3) = 0 .
HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH*)
CONST D_Pi = 2 * Pi; K3sPi = 3 / Pi;
Pi1s3 = Pi / 3; Pi5s3 = 5 * Pi1s3;
Pi2s3 = D_Pi / 3; Pi4s3 = 2 * Pi2s3;
Pzero: Pixel = (0, 0, 0);
(*HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH*)
FUNCTION FlinM(t: Reel): Byte; // Fonction linaire par morceaux
VAR s, u, w: Reel; Test15, Test24: Bool;
BEGIN
s:= Abs(t);
Test15:= ((s<Pi1s3) OR (s>Pi5s3));
Test24:= ((Pi2s3<s) AND (s<Pi4s3));
IF Test15 THEN w:= 1
ELSE IF Test24 THEN w:= 0
ELSE IF (t<Pi) THEN BEGIN
u:= Pi2s3 - s;
w:= K3sPi * u
END
ELSE BEGIN
u:= s - Pi4s3;
w:= K3sPi * u
END;
Result:= Round(255 * w)
END;
// F4(t) = (1024*Cos(t) + 512*Sin(t)2 +128*Sin(t)4 + 64*Sin(t)6 + 29)/1053
FUNCTION F4(t: Reel): Byte;
VAR Ct, St, St2, St4, St6, s, w: Reel;
BEGIN
SinCos(t, St, Ct);
IF (Ct>-0.5) THEN BEGIN
St2:= Sqr(St); St4:= Sqr(St2); St6:= St2 * St4;
s:= 29; IncR(s, 64 * St6);
IncR(s, 128 * St4); IncR(s, 512 * St2);
IncR(s, 1024 * Ct); w:= s / 1053
END
ELSE w:= 0;
Result:= Round(255 * w)
END;
// F3(x) = (128*Cos(x) + 64*Sin(x)2 + 16*Sin(x)4 + 7)/135
FUNCTION F3(t: Reel): Byte;
VAR Ct, St, St2, St4, s, w: Reel;
BEGIN
SinCos(t, St, Ct);
IF (Ct>-0.5) THEN BEGIN
St2:= Sqr(St); St4:= Sqr(St2);
s:= 7; IncR(s, 16 * St4);
IncR(s, 64 * St2); IncR(s, 128 * Ct);
w:= s / 135
END
ELSE w:= 0;
Result:= Round(255 * w)
END;
// F2(x) = (8*Cos(x) + 4*Sin(x)2 + 1)/9
FUNCTION F2(t: Reel): Byte;
VAR Ct, St, St2, s, w: Reel;
BEGIN
SinCos(t, St, Ct);
IF (Ct>-0.5) THEN BEGIN
St2:= Sqr(St);
s:= 1; IncR(s, 4 * St2);
IncR(s, 8 * Ct); w:= s / 9
END
ELSE w:= 0;
Result:= Round(255 * w)
END;
// F1(x) = (2*Cos(x) + 1)/3
FUNCTION F1(t: Reel): Byte;
VAR Ct, St, s, w: Reel;
BEGIN
SinCos(t, St, Ct);
IF (Ct>-0.5) THEN BEGIN
s:= 1; IncR(s, 2 * Ct);
w:= s / 3
END
ELSE w:= 0;
Result:= Round(255 * w)
END; |
Partager