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
| class Fourier{
int n,i; float c() ; Double f();
float uac,vac, t;
float uac1=0;
float uac2 = 0;
Vector u1 = new Vector(n + 1, 2);
Vector u = new Vector(n , 2);
Double a1;
Double c1;
Double a2 , b1 , b2 , x1 ,y1 ;
int i, k ;
float pi = 3.1416;
Vector f1 = new Vector(n);
Vector f = new Vector(n);
for(int i=1;i<=n;i++){
uac1 = uac1 + (c(i, 1) * c(i + 1, 2) - c(i + 1, 1) * c(i, 2)) * (c(i, 1) + c(i + 1, 1));
uac2 = uac2 + c(i, 1) * c(i + 1, 2) - c(i + 1, 1) * c(i, 2);
}
uac = (uac1 / (3 * uac2));
float vac1 = 0;
for(i=1;i<=n;i++)
{
vac1 = vac1 + (c(i, 1) * c(i + 1, 2) - c(i + 1, 1) * c(i, 2)) * (c(i, 2) + c(i + 1, 2));
}
vac =( vac1 / (3 * uac2));
for(i=1;i<=n+1;i++){
u1(i, 1) = c(i, 1) - uac;
u1(i, 2) = c(i, 2) - vac;
}
//ReDim t(n + 1)
t(1) = 0;
for(i=1;i<=n;i++)
{ t(i + 1) = t(i) + math.abs(u1(i, 1) * u1(i + 1, 2) - u1(i + 1, 1) * u1(i, 2)) / 2;
}
tt = t(n + 1);
for(i=1;i<=n;i++)
{
a1(1) = 0;
a1(2) = 0;
b1(1) = 0;
b1(2) = 0;
for(k=1;k<=n;k++){
if t(k) <> t(k + 1) {
a1(1) = a1(1) + (Math.cos(2 * Math.PI * i * t(k + 1) / tt) - Math.cos(2 *Math.PI * i * t(k) / tt)) * (c(k + 1, 1) - c(k, 1)) / (t(k + 1) - t(k));
a1(2) = a1(2) + (-Sin(2 * Math.PI * i * t(k + 1) / tt) + Math.sin(2 * Math.PI * i * t(k) / tt)) * (c(k + 1, 1) - c(k, 1)) / (t(k + 1) - t(k));
b1(1) = b1(1) + (Math.cos(2 *Math.PI * i * t(k + 1) / tt) - Math.cos(2 *Math.PI * i * t(k) / tt)) * (c(k + 1, 2) - c(k, 2)) / (t(k + 1) - t(k));
b1(2) = b1(2) + (-Sin(2 * Math.PI * i * t(k + 1) / tt) + Math.sin(2 * Math.PI * i * t(k) / tt)) * (c(k + 1, 2) - c(k, 2)) / (t(k + 1) - t(k));
}
}
a1(1) = a1(1) * tt / ((2 *Math.PI * i) ^ 2);
a1(2) = a1(2) * tt / ((2 *Math.PI * i) ^ 2);
b1(1) = b1(1) * tt / ((2 * Math.PI * i) ^ 2);
b1(2) = b1(2) * tt / ((2 * Math.PI * i) ^ 2);
a2(1) = 0;
a2(2) = 0;
b2(1) = 0;
b2(2) = 0;
for(k=1;k<=n;k++)
{
if t(k) = t(k + 1) {
a2(1) = a2(1) + Math.cos(2 * Math.PI * i * t(k) / tt) * (c(k + 1, 1) - c(k, 1));
a2(2) = a2(2) - Math.sin(2 * Math.PI * i * t(k) / tt) * (c(k + 1, 1) - c(k, 1));
b2(1) = b2(1) + Math.cos(2 * Math.PI * i * t(k) / tt) * (c(k + 1, 2) - c(k, 2));
b2(2) = b2(2) - Math.sin(2 * Math.PI * i * t(k) / tt) * (c(k + 1, 2) - c(k, 2));
}
}
a2(1) = a2(1) / (2 * Math.PI * i);
a2(2) = a2(2) / (2 * Math.PI * i);
b2(1) = b2(1) / (2 * Math.PI * i);
b2(2) = b2(2) / (2 * Math.PI * i);
c1 = a2(1);
a2(1) = -a2(2);
a2(2) = c1;
c1 = b2(1);
b2(1) = -b2(2);
b2(2) = c1;
u(i, 1) = a1(1) + a2(1) - b1(2) - b2(2);
u(i, 2) = a1(2) + a2(2) + b1(1) + b2(1);
f1(i) = Math.sqrt(u(i, 1) ^ 2 + u(i, 2) ^ 2);
}
for(int i=1;i<=n;i++)
{f(i) = (f1(i) / f1(1));
}
} |
Partager