From 565a4bd035b9d4a83955808efef20f1d8dfa24cf Mon Sep 17 00:00:00 2001 From: Frank Warmerdam Date: Thu, 18 Mar 1999 16:34:52 +0000 Subject: New git-svn-id: http://svn.osgeo.org/metacrs/proj/trunk@776 4e78687f-474d-0410-85f9-8d5e500ac6b2 --- src/bchgen.c | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 src/bchgen.c (limited to 'src/bchgen.c') diff --git a/src/bchgen.c b/src/bchgen.c new file mode 100644 index 00000000..cc03f037 --- /dev/null +++ b/src/bchgen.c @@ -0,0 +1,61 @@ +/* generate double bivariate Chebychev polynomial */ +#ifndef lint +static const char SCCSID[]="@(#)bchgen.c 4.5 94/03/22 GIE REL"; +#endif +#include + int +bchgen(UV a, UV b, int nu, int nv, UV **f, UV(*func)(UV)) { + int i, j, k; + UV arg, *t, bma, bpa, *c; + double d, fac; + + bma.u = 0.5 * (b.u - a.u); bma.v = 0.5 * (b.v - a.v); + bpa.u = 0.5 * (b.u + a.u); bpa.v = 0.5 * (b.v + a.v); + for ( i = 0; i < nu; ++i) { + arg.u = cos(PI * (i + 0.5) / nu) * bma.u + bpa.u; + for ( j = 0; j < nv; ++j) { + arg.v = cos(PI * (j + 0.5) / nv) * bma.v + bpa.v; + f[i][j] = (*func)(arg); + if ((f[i][j]).u == HUGE_VAL) + return(1); + } + } + if (!(c = vector1(nu, sizeof(UV)))) return 1; + fac = 2. / nu; + for ( j = 0; j < nv ; ++j) { + for ( i = 0; i < nu; ++i) { + arg.u = arg.v = 0.; + for (k = 0; k < nu; ++k) { + d = cos(PI * i * (k + .5) / nu); + arg.u += f[k][j].u * d; + arg.v += f[k][j].v * d; + } + arg.u *= fac; + arg.v *= fac; + c[i] = arg; + } + for (i = 0; i < nu; ++i) + f[i][j] = c[i]; + } + pj_dalloc(c); + if (!(c = vector1(nv, sizeof(UV)))) return 1; + fac = 2. / nv; + for ( i = 0; i < nu; ++i) { + t = f[i]; + for (j = 0; j < nv; ++j) { + arg.u = arg.v = 0.; + for (k = 0; k < nv; ++k) { + d = cos(PI * j * (k + .5) / nv); + arg.u += t[k].u * d; + arg.v += t[k].v * d; + } + arg.u *= fac; + arg.v *= fac; + c[j] = arg; + } + f[i] = c; + c = t; + } + pj_dalloc(c); + return(0); +} -- cgit v1.2.3