svn-gvsig-desktop / tags / v1_1_2_Build_1041 / libraries / libjni-proj4 / src / bchgen.c @ 33839
History | View | Annotate | Download (1.43 KB)
1 |
/* generate double bivariate Chebychev polynomial */
|
---|---|
2 |
#ifndef lint
|
3 |
static const char SCCSID[]="@(#)bchgen.c 4.5 94/03/22 GIE REL"; |
4 |
#endif
|
5 |
#include <projects.h> |
6 |
int
|
7 |
bchgen(projUV a, projUV b, int nu, int nv, projUV **f, projUV(*func)(projUV)) { |
8 |
int i, j, k;
|
9 |
projUV arg, *t, bma, bpa, *c; |
10 |
double d, fac;
|
11 |
|
12 |
bma.u = 0.5 * (b.u - a.u); bma.v = 0.5 * (b.v - a.v); |
13 |
bpa.u = 0.5 * (b.u + a.u); bpa.v = 0.5 * (b.v + a.v); |
14 |
for ( i = 0; i < nu; ++i) { |
15 |
arg.u = cos(PI * (i + 0.5) / nu) * bma.u + bpa.u; |
16 |
for ( j = 0; j < nv; ++j) { |
17 |
arg.v = cos(PI * (j + 0.5) / nv) * bma.v + bpa.v; |
18 |
f[i][j] = (*func)(arg); |
19 |
if ((f[i][j]).u == HUGE_VAL)
|
20 |
return(1); |
21 |
} |
22 |
} |
23 |
if (!(c = (projUV *) vector1(nu, sizeof(projUV)))) return 1; |
24 |
fac = 2. / nu;
|
25 |
for ( j = 0; j < nv ; ++j) { |
26 |
for ( i = 0; i < nu; ++i) { |
27 |
arg.u = arg.v = 0.;
|
28 |
for (k = 0; k < nu; ++k) { |
29 |
d = cos(PI * i * (k + .5) / nu);
|
30 |
arg.u += f[k][j].u * d; |
31 |
arg.v += f[k][j].v * d; |
32 |
} |
33 |
arg.u *= fac; |
34 |
arg.v *= fac; |
35 |
c[i] = arg; |
36 |
} |
37 |
for (i = 0; i < nu; ++i) |
38 |
f[i][j] = c[i]; |
39 |
} |
40 |
pj_dalloc(c); |
41 |
if (!(c = (projUV*) vector1(nv, sizeof(projUV)))) return 1; |
42 |
fac = 2. / nv;
|
43 |
for ( i = 0; i < nu; ++i) { |
44 |
t = f[i]; |
45 |
for (j = 0; j < nv; ++j) { |
46 |
arg.u = arg.v = 0.;
|
47 |
for (k = 0; k < nv; ++k) { |
48 |
d = cos(PI * j * (k + .5) / nv);
|
49 |
arg.u += t[k].u * d; |
50 |
arg.v += t[k].v * d; |
51 |
} |
52 |
arg.u *= fac; |
53 |
arg.v *= fac; |
54 |
c[j] = arg; |
55 |
} |
56 |
f[i] = c; |
57 |
c = t; |
58 |
} |
59 |
pj_dalloc(c); |
60 |
return(0); |
61 |
} |