Changeset 4422
- Timestamp:
- Jun 28, 2005, 2:43:46 PM (21 years ago)
- Location:
- trunk/psLib
- Files:
-
- 13 edited
-
src/dataManip/psFunctions.c (modified) (63 diffs)
-
src/dataManip/psFunctions.h (modified) (26 diffs)
-
src/math/psPolynomial.c (modified) (63 diffs)
-
src/math/psPolynomial.h (modified) (26 diffs)
-
src/math/psSpline.c (modified) (63 diffs)
-
src/math/psSpline.h (modified) (26 diffs)
-
test/astronomy/tst_psCoord.c (modified) (4 diffs)
-
test/dataManip/tst_psFunc00.c (modified) (3 diffs)
-
test/dataManip/verified/tst_psFunc00.stderr (modified) (4 diffs)
-
test/dataManip/verified/tst_psFunc08.stderr (modified) (1 diff)
-
test/dataManip/verified/tst_psFunc09.stderr (modified) (1 diff)
-
test/dataManip/verified/tst_psFunc10.stderr (modified) (1 diff)
-
test/dataManip/verified/tst_psFunc11.stderr (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psLib/src/dataManip/psFunctions.c
r4405 r4422 7 7 * polynomials. It also contains a Gaussian functions. 8 8 * 9 * @version $Revision: 1.11 2$ $Name: not supported by cvs2svn $10 * @date $Date: 2005-06-2 8 00:53:53$9 * @version $Revision: 1.113 $ $Name: not supported by cvs2svn $ 10 * @date $Date: 2005-06-29 00:43:46 $ 11 11 * 12 12 * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii … … 46 46 /* TYPE DEFINITIONS */ 47 47 /*****************************************************************************/ 48 static void polynomial1DFree(psPolynomial1D* myPoly);49 static void polynomial2DFree(psPolynomial2D* myPoly);50 static void polynomial3DFree(psPolynomial3D* myPoly);51 static void polynomial4DFree(psPolynomial4D* myPoly);52 static void dPolynomial1DFree(psDPolynomial1D* myPoly);53 static void dPolynomial2DFree(psDPolynomial2D* myPoly);54 static void dPolynomial3DFree(psDPolynomial3D* myPoly);55 static void dPolynomial4DFree(psDPolynomial4D* myPoly);48 static void polynomial1DFree(psPolynomial1D* poly); 49 static void polynomial2DFree(psPolynomial2D* poly); 50 static void polynomial3DFree(psPolynomial3D* poly); 51 static void polynomial4DFree(psPolynomial4D* poly); 52 static void dPolynomial1DFree(psDPolynomial1D* poly); 53 static void dPolynomial2DFree(psDPolynomial2D* poly); 54 static void dPolynomial3DFree(psDPolynomial3D* poly); 55 static void dPolynomial4DFree(psDPolynomial4D* poly); 56 56 static void spline1DFree(psSpline1D *tmpSpline); 57 57 static psS32 vectorBinDisectF32(psF32 *bins,psS32 numBins,psF32 x); … … 97 97 } 98 98 99 static void polynomial1DFree(psPolynomial1D* myPoly)100 { 101 psFree( myPoly->coeff);102 psFree( myPoly->coeffErr);103 psFree( myPoly->mask);104 } 105 106 static void polynomial2DFree(psPolynomial2D* myPoly)107 { 108 psS32x = 0;109 110 for (x = 0; x < myPoly->nX; x++) {111 psFree( myPoly->coeff[x]);112 psFree( myPoly->coeffErr[x]);113 psFree( myPoly->mask[x]);114 } 115 psFree( myPoly->coeff);116 psFree( myPoly->coeffErr);117 psFree( myPoly->mask);118 } 119 120 static void polynomial3DFree(psPolynomial3D* myPoly)121 { 122 psS32x = 0;123 psS32y = 0;124 125 for (x = 0; x < myPoly->nX; x++) {126 for (y = 0; y < myPoly->nY; y++) {127 psFree( myPoly->coeff[x][y]);128 psFree( myPoly->coeffErr[x][y]);129 psFree( myPoly->mask[x][y]);130 } 131 psFree( myPoly->coeff[x]);132 psFree( myPoly->coeffErr[x]);133 psFree( myPoly->mask[x]);134 } 135 136 psFree( myPoly->coeff);137 psFree( myPoly->coeffErr);138 psFree( myPoly->mask);139 } 140 141 static void polynomial4DFree(psPolynomial4D* myPoly)142 { 143 psS32 w= 0;144 psS32 x= 0;145 psS32 y= 0;146 147 for ( w = 0; w < myPoly->nW; w++) {148 for ( x = 0; x < myPoly->nX; x++) {149 for ( y = 0; y < myPoly->nY; y++) {150 psFree( myPoly->coeff[w][x][y]);151 psFree( myPoly->coeffErr[w][x][y]);152 psFree( myPoly->mask[w][x][y]);99 static void polynomial1DFree(psPolynomial1D* poly) 100 { 101 psFree(poly->coeff); 102 psFree(poly->coeffErr); 103 psFree(poly->mask); 104 } 105 106 static void polynomial2DFree(psPolynomial2D* poly) 107 { 108 unsigned int x = 0; 109 110 for (x = 0; x < poly->nX; x++) { 111 psFree(poly->coeff[x]); 112 psFree(poly->coeffErr[x]); 113 psFree(poly->mask[x]); 114 } 115 psFree(poly->coeff); 116 psFree(poly->coeffErr); 117 psFree(poly->mask); 118 } 119 120 static void polynomial3DFree(psPolynomial3D* poly) 121 { 122 unsigned int x = 0; 123 unsigned int y = 0; 124 125 for (x = 0; x < poly->nX; x++) { 126 for (y = 0; y < poly->nY; y++) { 127 psFree(poly->coeff[x][y]); 128 psFree(poly->coeffErr[x][y]); 129 psFree(poly->mask[x][y]); 130 } 131 psFree(poly->coeff[x]); 132 psFree(poly->coeffErr[x]); 133 psFree(poly->mask[x]); 134 } 135 136 psFree(poly->coeff); 137 psFree(poly->coeffErr); 138 psFree(poly->mask); 139 } 140 141 static void polynomial4DFree(psPolynomial4D* poly) 142 { 143 unsigned int x = 0; 144 unsigned int y = 0; 145 unsigned int z = 0; 146 147 for (x = 0; x < poly->nX; x++) { 148 for (y = 0; y < poly->nY; y++) { 149 for (z = 0; z < poly->nZ; z++) { 150 psFree(poly->coeff[x][y][z]); 151 psFree(poly->coeffErr[x][y][z]); 152 psFree(poly->mask[x][y][z]); 153 153 } 154 psFree( myPoly->coeff[w][x]);155 psFree( myPoly->coeffErr[w][x]);156 psFree( myPoly->mask[w][x]);157 } 158 psFree( myPoly->coeff[w]);159 psFree( myPoly->coeffErr[w]);160 psFree( myPoly->mask[w]);161 } 162 163 psFree( myPoly->coeff);164 psFree( myPoly->coeffErr);165 psFree( myPoly->mask);166 } 167 168 static void dPolynomial1DFree(psDPolynomial1D* myPoly)169 { 170 psFree( myPoly->coeff);171 psFree( myPoly->coeffErr);172 psFree( myPoly->mask);173 } 174 175 static void dPolynomial2DFree(psDPolynomial2D* myPoly)176 { 177 for ( psS32 x = 0; x < myPoly->nX; x++) {178 psFree( myPoly->coeff[x]);179 psFree( myPoly->coeffErr[x]);180 psFree( myPoly->mask[x]);181 } 182 psFree( myPoly->coeff);183 psFree( myPoly->coeffErr);184 psFree( myPoly->mask);185 } 186 187 static void dPolynomial3DFree(psDPolynomial3D* myPoly)188 { 189 psS32x = 0;190 psS32y = 0;191 192 for (x = 0; x < myPoly->nX; x++) {193 for (y = 0; y < myPoly->nY; y++) {194 psFree( myPoly->coeff[x][y]);195 psFree( myPoly->coeffErr[x][y]);196 psFree( myPoly->mask[x][y]);197 } 198 psFree( myPoly->coeff[x]);199 psFree( myPoly->coeffErr[x]);200 psFree( myPoly->mask[x]);201 } 202 203 psFree( myPoly->coeff);204 psFree( myPoly->coeffErr);205 psFree( myPoly->mask);206 } 207 208 static void dPolynomial4DFree(psDPolynomial4D* myPoly)209 { 210 psS32 w= 0;211 psS32 x= 0;212 psS32 y= 0;213 214 for ( w = 0; w < myPoly->nW; w++) {215 for ( x = 0; x < myPoly->nX; x++) {216 for ( y = 0; y < myPoly->nY; y++) {217 psFree( myPoly->coeff[w][x][y]);218 psFree( myPoly->coeffErr[w][x][y]);219 psFree( myPoly->mask[w][x][y]);154 psFree(poly->coeff[x][y]); 155 psFree(poly->coeffErr[x][y]); 156 psFree(poly->mask[x][y]); 157 } 158 psFree(poly->coeff[x]); 159 psFree(poly->coeffErr[x]); 160 psFree(poly->mask[x]); 161 } 162 163 psFree(poly->coeff); 164 psFree(poly->coeffErr); 165 psFree(poly->mask); 166 } 167 168 static void dPolynomial1DFree(psDPolynomial1D* poly) 169 { 170 psFree(poly->coeff); 171 psFree(poly->coeffErr); 172 psFree(poly->mask); 173 } 174 175 static void dPolynomial2DFree(psDPolynomial2D* poly) 176 { 177 for (unsigned int x = 0; x < poly->nX; x++) { 178 psFree(poly->coeff[x]); 179 psFree(poly->coeffErr[x]); 180 psFree(poly->mask[x]); 181 } 182 psFree(poly->coeff); 183 psFree(poly->coeffErr); 184 psFree(poly->mask); 185 } 186 187 static void dPolynomial3DFree(psDPolynomial3D* poly) 188 { 189 unsigned int x = 0; 190 unsigned int y = 0; 191 192 for (x = 0; x < poly->nX; x++) { 193 for (y = 0; y < poly->nY; y++) { 194 psFree(poly->coeff[x][y]); 195 psFree(poly->coeffErr[x][y]); 196 psFree(poly->mask[x][y]); 197 } 198 psFree(poly->coeff[x]); 199 psFree(poly->coeffErr[x]); 200 psFree(poly->mask[x]); 201 } 202 203 psFree(poly->coeff); 204 psFree(poly->coeffErr); 205 psFree(poly->mask); 206 } 207 208 static void dPolynomial4DFree(psDPolynomial4D* poly) 209 { 210 unsigned int x = 0; 211 unsigned int y = 0; 212 unsigned int z = 0; 213 214 for (x = 0; x < poly->nX; x++) { 215 for (y = 0; y < poly->nY; y++) { 216 for (z = 0; z < poly->nZ; z++) { 217 psFree(poly->coeff[x][y][z]); 218 psFree(poly->coeffErr[x][y][z]); 219 psFree(poly->mask[x][y][z]); 220 220 } 221 psFree( myPoly->coeff[w][x]);222 psFree( myPoly->coeffErr[w][x]);223 psFree( myPoly->mask[w][x]);224 } 225 psFree( myPoly->coeff[w]);226 psFree( myPoly->coeffErr[w]);227 psFree( myPoly->mask[w]);228 } 229 230 psFree( myPoly->coeff);231 psFree( myPoly->coeffErr);232 psFree( myPoly->mask);221 psFree(poly->coeff[x][y]); 222 psFree(poly->coeffErr[x][y]); 223 psFree(poly->mask[x][y]); 224 } 225 psFree(poly->coeff[x]); 226 psFree(poly->coeffErr[x]); 227 psFree(poly->mask[x]); 228 } 229 230 psFree(poly->coeff); 231 psFree(poly->coeffErr); 232 psFree(poly->mask); 233 233 } 234 234 … … 280 280 Polynomial coefficients will be accessed in [w][x][y][z] fashion. 281 281 *****************************************************************************/ 282 static psF32 ordPolynomial1DEval(psF32 x, const psPolynomial1D* myPoly)282 static psF32 ordPolynomial1DEval(psF32 x, const psPolynomial1D* poly) 283 283 { 284 284 psS32 loop_x = 0; … … 289 289 "---- Calling ordPolynomial1DEval(%f)\n", x); 290 290 psTrace(".psLib.dataManip.psFunctions.ordPolynomial1DEval", 4, 291 "Polynomial order is %d\n", myPoly->n);292 for (loop_x = 0; loop_x < myPoly->n; loop_x++) {291 "Polynomial order is %d\n", poly->n); 292 for (loop_x = 0; loop_x < poly->n; loop_x++) { 293 293 psTrace(".psLib.dataManip.psFunctions.ordPolynomial1DEval", 4, 294 "Polynomial coeff[%d] is %f\n", loop_x, myPoly->coeff[loop_x]);295 } 296 297 for (loop_x = 0; loop_x < myPoly->n; loop_x++) {298 if ( myPoly->mask[loop_x] == 0) {294 "Polynomial coeff[%d] is %f\n", loop_x, poly->coeff[loop_x]); 295 } 296 297 for (loop_x = 0; loop_x < poly->n; loop_x++) { 298 if (poly->mask[loop_x] == 0) { 299 299 psTrace(".psLib.dataManip.psFunctions.ordPolynomial1DEval", 10, 300 "polysum+= sum*coeff [%f+= (%f * %f)\n", polySum, xSum, myPoly->coeff[loop_x]);301 polySum += xSum * myPoly->coeff[loop_x];300 "polysum+= sum*coeff [%f+= (%f * %f)\n", polySum, xSum, poly->coeff[loop_x]); 301 polySum += xSum * poly->coeff[loop_x]; 302 302 } 303 303 xSum *= x; … … 310 310 // XXX: How does the mask vector effect Crenshaw's formula? 311 311 // XXX: We assume that x is scaled between -1.0 and 1.0; 312 static psF32 chebPolynomial1DEval(psF32 x, const psPolynomial1D* myPoly)312 static psF32 chebPolynomial1DEval(psF32 x, const psPolynomial1D* poly) 313 313 { 314 314 PS_ASSERT_FLOAT_WITHIN_RANGE(x, -1.0, 1.0, 0.0); 315 315 // XXX: Create a macro for this in psConstants.h 316 if ( myPoly->n < 1) {317 psError(PS_ERR_BAD_PARAMETER_VALUE, true, "Error: Chebyshev polynomial as order %d.", myPoly->n);316 if (poly->n < 1) { 317 psError(PS_ERR_BAD_PARAMETER_VALUE, true, "Error: Chebyshev polynomial as order %d.", poly->n); 318 318 return(NAN); 319 319 } 320 320 psVector *d; 321 psS32 n = myPoly->n;321 psS32 n = poly->n; 322 322 psS32 i; 323 323 psF32 tmp = 0.0; … … 325 325 // Special case where the Chebyshev poly is constant. 326 326 if (n == 1) { 327 if ( myPoly->mask[0] == 0) {328 tmp += myPoly->coeff[0];327 if (poly->mask[0] == 0) { 328 tmp += poly->coeff[0]; 329 329 } 330 330 return(tmp); … … 333 333 // Special case where the Chebyshev poly is linear. 334 334 if (n == 2) { 335 if ( myPoly->mask[0] == 0) {336 tmp+= myPoly->coeff[0];337 } 338 if ( myPoly->mask[1] == 0) {339 tmp+= myPoly->coeff[1] * x;335 if (poly->mask[0] == 0) { 336 tmp+= poly->coeff[0]; 337 } 338 if (poly->mask[1] == 0) { 339 tmp+= poly->coeff[1] * x; 340 340 } 341 341 return(tmp); … … 344 344 // General case where the Chebyshev poly has 2 or more terms. 345 345 d = psVectorAlloc(n, PS_TYPE_F32); 346 if( myPoly->mask[n-1] == 0) {347 d->data.F32[n-1] = myPoly->coeff[n-1];346 if(poly->mask[n-1] == 0) { 347 d->data.F32[n-1] = poly->coeff[n-1]; 348 348 } else { 349 349 d->data.F32[n-1] = 0.0; … … 351 351 352 352 d->data.F32[n-2] = (2.0 * x * d->data.F32[n-1]); 353 if( myPoly->mask[n-2] == 0) {354 d->data.F32[n-2] += myPoly->coeff[n-2];353 if(poly->mask[n-2] == 0) { 354 d->data.F32[n-2] += poly->coeff[n-2]; 355 355 } 356 356 … … 358 358 d->data.F32[i] = (2.0 * x * d->data.F32[i+1]) - 359 359 (d->data.F32[i+2]); 360 if( myPoly->mask[i] == 0) {361 d->data.F32[i] += myPoly->coeff[i];360 if(poly->mask[i] == 0) { 361 d->data.F32[i] += poly->coeff[i]; 362 362 } 363 363 } … … 365 365 tmp = (x * d->data.F32[1]) - 366 366 (d->data.F32[2]); 367 if( myPoly->mask[0] == 0) {368 tmp += (0.5 * myPoly->coeff[0]);367 if(poly->mask[0] == 0) { 368 tmp += (0.5 * poly->coeff[0]); 369 369 } 370 370 psFree(d); … … 378 378 psPolynomial1D **chebPolys = NULL; 379 379 380 n = myPoly->n;380 n = poly->n; 381 381 chebPolys = createChebyshevPolys(n); 382 382 383 383 tmp = 0.0; 384 for (i=0;i< myPoly->n;i++) {385 tmp+= ( myPoly->coeff[i] * psPolynomial1DEval(x, chebPolys[i]));386 } 387 tmp-= ( myPoly->coeff[0]/2.0);384 for (i=0;i<poly->n;i++) { 385 tmp+= (poly->coeff[i] * psPolynomial1DEval(x, chebPolys[i])); 386 } 387 tmp-= (poly->coeff[0]/2.0); 388 388 389 389 … … 394 394 static psF32 ordPolynomial2DEval(psF32 x, 395 395 psF32 y, 396 const psPolynomial2D* myPoly)397 { 398 PS_ASSERT_POLY_NON_NULL( myPoly, NAN);396 const psPolynomial2D* poly) 397 { 398 PS_ASSERT_POLY_NON_NULL(poly, NAN); 399 399 400 400 psS32 loop_x = 0; … … 404 404 psF32 ySum = 1.0; 405 405 406 for (loop_x = 0; loop_x < myPoly->nX; loop_x++) {406 for (loop_x = 0; loop_x < poly->nX; loop_x++) { 407 407 ySum = xSum; 408 for (loop_y = 0; loop_y < myPoly->nY; loop_y++) {409 if ( myPoly->mask[loop_x][loop_y] == 0) {410 polySum += ySum * myPoly->coeff[loop_x][loop_y];408 for (loop_y = 0; loop_y < poly->nY; loop_y++) { 409 if (poly->mask[loop_x][loop_y] == 0) { 410 polySum += ySum * poly->coeff[loop_x][loop_y]; 411 411 } 412 412 ySum *= y; … … 418 418 } 419 419 420 static psF32 chebPolynomial2DEval(psF32 x, psF32 y, const psPolynomial2D* myPoly)420 static psF32 chebPolynomial2DEval(psF32 x, psF32 y, const psPolynomial2D* poly) 421 421 { 422 422 PS_ASSERT_FLOAT_WITHIN_RANGE(x, -1.0, 1.0, 0.0); 423 423 PS_ASSERT_FLOAT_WITHIN_RANGE(y, -1.0, 1.0, 0.0); 424 PS_ASSERT_POLY_NON_NULL( myPoly, NAN);424 PS_ASSERT_POLY_NON_NULL(poly, NAN); 425 425 426 426 psS32 loop_x = 0; … … 433 433 // Determine how many Chebyshev polynomials 434 434 // are needed, then create them. 435 maxChebyPoly = myPoly->nX;436 if ( myPoly->nY > maxChebyPoly) {437 maxChebyPoly = myPoly->nY;435 maxChebyPoly = poly->nX; 436 if (poly->nY > maxChebyPoly) { 437 maxChebyPoly = poly->nY; 438 438 } 439 439 chebPolys = createChebyshevPolys(maxChebyPoly); 440 440 441 for (loop_x = 0; loop_x < myPoly->nX; loop_x++) {442 for (loop_y = 0; loop_y < myPoly->nY; loop_y++) {443 if ( myPoly->mask[loop_x][loop_y] == 0) {444 polySum += myPoly->coeff[loop_x][loop_y] *441 for (loop_x = 0; loop_x < poly->nX; loop_x++) { 442 for (loop_y = 0; loop_y < poly->nY; loop_y++) { 443 if (poly->mask[loop_x][loop_y] == 0) { 444 polySum += poly->coeff[loop_x][loop_y] * 445 445 psPolynomial1DEval(chebPolys[loop_x], x) * 446 446 psPolynomial1DEval(chebPolys[loop_y], y); … … 455 455 } 456 456 457 static psF32 ordPolynomial3DEval(psF32 x, psF32 y, psF32 z, const psPolynomial3D* myPoly)457 static psF32 ordPolynomial3DEval(psF32 x, psF32 y, psF32 z, const psPolynomial3D* poly) 458 458 { 459 459 psS32 loop_x = 0; … … 465 465 psF32 zSum = 1.0; 466 466 467 for (loop_x = 0; loop_x < myPoly->nX; loop_x++) {467 for (loop_x = 0; loop_x < poly->nX; loop_x++) { 468 468 ySum = xSum; 469 for (loop_y = 0; loop_y < myPoly->nY; loop_y++) {469 for (loop_y = 0; loop_y < poly->nY; loop_y++) { 470 470 zSum = ySum; 471 for (loop_z = 0; loop_z < myPoly->nZ; loop_z++) {472 if ( myPoly->mask[loop_x][loop_y][loop_z] == 0) {473 polySum += zSum * myPoly->coeff[loop_x][loop_y][loop_z];471 for (loop_z = 0; loop_z < poly->nZ; loop_z++) { 472 if (poly->mask[loop_x][loop_y][loop_z] == 0) { 473 polySum += zSum * poly->coeff[loop_x][loop_y][loop_z]; 474 474 } 475 475 zSum *= z; … … 483 483 } 484 484 485 static psF32 chebPolynomial3DEval(psF32 x, psF32 y, psF32 z, const psPolynomial3D* myPoly)485 static psF32 chebPolynomial3DEval(psF32 x, psF32 y, psF32 z, const psPolynomial3D* poly) 486 486 { 487 487 PS_ASSERT_FLOAT_WITHIN_RANGE(x, -1.0, 1.0, 0.0); … … 498 498 // Determine how many Chebyshev polynomials 499 499 // are needed, then create them. 500 maxChebyPoly = myPoly->nX;501 if ( myPoly->nY > maxChebyPoly) {502 maxChebyPoly = myPoly->nY;503 } 504 if ( myPoly->nZ > maxChebyPoly) {505 maxChebyPoly = myPoly->nZ;500 maxChebyPoly = poly->nX; 501 if (poly->nY > maxChebyPoly) { 502 maxChebyPoly = poly->nY; 503 } 504 if (poly->nZ > maxChebyPoly) { 505 maxChebyPoly = poly->nZ; 506 506 } 507 507 chebPolys = createChebyshevPolys(maxChebyPoly); 508 508 509 for (loop_x = 0; loop_x < myPoly->nX; loop_x++) {510 for (loop_y = 0; loop_y < myPoly->nY; loop_y++) {511 for (loop_z = 0; loop_z < myPoly->nZ; loop_z++) {512 if ( myPoly->mask[loop_x][loop_y][loop_z] == 0) {513 polySum += myPoly->coeff[loop_x][loop_y][loop_z] *509 for (loop_x = 0; loop_x < poly->nX; loop_x++) { 510 for (loop_y = 0; loop_y < poly->nY; loop_y++) { 511 for (loop_z = 0; loop_z < poly->nZ; loop_z++) { 512 if (poly->mask[loop_x][loop_y][loop_z] == 0) { 513 polySum += poly->coeff[loop_x][loop_y][loop_z] * 514 514 psPolynomial1DEval(chebPolys[loop_x], x) * 515 515 psPolynomial1DEval(chebPolys[loop_y], y) * … … 527 527 } 528 528 529 static psF32 ordPolynomial4DEval(psF32 w, psF32 x, psF32 y, psF32 z, const psPolynomial4D* myPoly) 530 { 531 psS32 loop_w = 0; 529 static psF32 ordPolynomial4DEval(psF32 x, psF32 y, psF32 z, psF32 t, const psPolynomial4D* poly) 530 { 532 531 psS32 loop_x = 0; 533 532 psS32 loop_y = 0; 534 533 psS32 loop_z = 0; 534 psS32 loop_t = 0; 535 535 psF32 polySum = 0.0; 536 psF32 wSum = 1.0;537 536 psF32 xSum = 1.0; 538 537 psF32 ySum = 1.0; 539 538 psF32 zSum = 1.0; 540 541 for (loop_w = 0; loop_w < myPoly->nW; loop_w++) { 542 xSum = wSum; 543 for (loop_x = 0; loop_x < myPoly->nX; loop_x++) { 544 ySum = xSum; 545 for (loop_y = 0; loop_y < myPoly->nY; loop_y++) { 546 zSum = ySum; 547 for (loop_z = 0; loop_z < myPoly->nZ; loop_z++) { 548 if (myPoly->mask[loop_w][loop_x][loop_y][loop_z] == 0) { 549 polySum += zSum * myPoly->coeff[loop_w][loop_x][loop_y][loop_z]; 539 psF32 tSum = 1.0; 540 541 for (loop_x = 0; loop_x < poly->nX; loop_x++) { 542 ySum = xSum; 543 for (loop_y = 0; loop_y < poly->nY; loop_y++) { 544 zSum = ySum; 545 for (loop_z = 0; loop_z < poly->nZ; loop_z++) { 546 tSum = zSum; 547 for (loop_t = 0; loop_t < poly->nT; loop_t++) { 548 if (poly->mask[loop_x][loop_y][loop_z][loop_t] == 0) { 549 polySum += tSum * poly->coeff[loop_x][loop_y][loop_z][loop_t]; 550 550 } 551 zSum *= z;551 tSum *= t; 552 552 } 553 ySum *= y;553 zSum *= z; 554 554 } 555 xSum *= x;556 } 557 wSum *= w;555 ySum *= y; 556 } 557 xSum *= x; 558 558 } 559 559 … … 561 561 } 562 562 563 static psF32 chebPolynomial4DEval(psF32 w, psF32 x, psF32 y, psF32 z, const psPolynomial4D* myPoly) 564 { 565 PS_ASSERT_FLOAT_WITHIN_RANGE(w, -1.0, 1.0, 0.0); 563 static psF32 chebPolynomial4DEval(psF32 x, psF32 y, psF32 z, psF32 t, const psPolynomial4D* poly) 564 { 566 565 PS_ASSERT_FLOAT_WITHIN_RANGE(x, -1.0, 1.0, 0.0); 567 566 PS_ASSERT_FLOAT_WITHIN_RANGE(y, -1.0, 1.0, 0.0); 568 567 PS_ASSERT_FLOAT_WITHIN_RANGE(z, -1.0, 1.0, 0.0); 569 psS32 loop_w = 0;568 PS_ASSERT_FLOAT_WITHIN_RANGE(t, -1.0, 1.0, 0.0); 570 569 psS32 loop_x = 0; 571 570 psS32 loop_y = 0; 572 571 psS32 loop_z = 0; 572 psS32 loop_t = 0; 573 573 psS32 i = 0; 574 574 psF32 polySum = 0.0; … … 578 578 // Determine how many Chebyshev polynomials 579 579 // are needed, then create them. 580 maxChebyPoly = myPoly->nW;581 if ( myPoly->nX> maxChebyPoly) {582 maxChebyPoly = myPoly->nX;583 } 584 if ( myPoly->nY> maxChebyPoly) {585 maxChebyPoly = myPoly->nY;586 } 587 if ( myPoly->nZ> maxChebyPoly) {588 maxChebyPoly = myPoly->nZ;580 maxChebyPoly = poly->nX; 581 if (poly->nY > maxChebyPoly) { 582 maxChebyPoly = poly->nY; 583 } 584 if (poly->nZ > maxChebyPoly) { 585 maxChebyPoly = poly->nZ; 586 } 587 if (poly->nT > maxChebyPoly) { 588 maxChebyPoly = poly->nT; 589 589 } 590 590 chebPolys = createChebyshevPolys(maxChebyPoly); 591 591 592 for (loop_w = 0; loop_w < myPoly->nW; loop_w++) { 593 for (loop_x = 0; loop_x < myPoly->nX; loop_x++) { 594 for (loop_y = 0; loop_y < myPoly->nY; loop_y++) { 595 for (loop_z = 0; loop_z < myPoly->nZ; loop_z++) { 596 if (myPoly->mask[loop_w][loop_x][loop_y][loop_z] == 0) { 597 polySum += myPoly->coeff[loop_w][loop_x][loop_y][loop_z] * 598 psPolynomial1DEval(chebPolys[loop_w], w) * 592 for (loop_x = 0; loop_x < poly->nX; loop_x++) { 593 for (loop_y = 0; loop_y < poly->nY; loop_y++) { 594 for (loop_z = 0; loop_z < poly->nZ; loop_z++) { 595 for (loop_t = 0; loop_t < poly->nT; loop_t++) { 596 if (poly->mask[loop_x][loop_y][loop_z][loop_t] == 0) { 597 polySum += poly->coeff[loop_x][loop_y][loop_z][loop_t] * 599 598 psPolynomial1DEval(chebPolys[loop_x], x) * 600 599 psPolynomial1DEval(chebPolys[loop_y], y) * 601 psPolynomial1DEval(chebPolys[loop_z], z); 600 psPolynomial1DEval(chebPolys[loop_z], z) * 601 psPolynomial1DEval(chebPolys[loop_t], t); 602 602 } 603 603 } … … 616 616 Polynomial coefficients will be accessed in [w][x][y][z] fashion. 617 617 *****************************************************************************/ 618 static psF64 dOrdPolynomial1DEval(psF64 x, const psDPolynomial1D* myPoly)618 static psF64 dOrdPolynomial1DEval(psF64 x, const psDPolynomial1D* poly) 619 619 { 620 620 psS32 loop_x = 0; … … 622 622 psF64 xSum = 1.0; 623 623 624 for (loop_x = 0; loop_x < myPoly->n; loop_x++) {625 if ( myPoly->mask[loop_x] == 0) {626 polySum += xSum * myPoly->coeff[loop_x];624 for (loop_x = 0; loop_x < poly->n; loop_x++) { 625 if (poly->mask[loop_x] == 0) { 626 polySum += xSum * poly->coeff[loop_x]; 627 627 } 628 628 xSum *= x; … … 634 634 // XXX: You can do this without having to psAlloc() vector d. 635 635 // XXX: How does the mask vector effect Crenshaw's formula? 636 static psF64 dChebPolynomial1DEval(psF64 x, const psDPolynomial1D* myPoly)636 static psF64 dChebPolynomial1DEval(psF64 x, const psDPolynomial1D* poly) 637 637 { 638 638 PS_ASSERT_FLOAT_WITHIN_RANGE(x, -1.0, 1.0, 0.0); … … 642 642 psF64 tmp; 643 643 644 n = myPoly->n;644 n = poly->n; 645 645 d = psVectorAlloc(n, PS_TYPE_F64); 646 if( myPoly->mask[n-1] == 0) {647 d->data.F64[n-1] = myPoly->coeff[n-1];646 if(poly->mask[n-1] == 0) { 647 d->data.F64[n-1] = poly->coeff[n-1]; 648 648 } else { 649 649 d->data.F64[n-1] = 0.0; 650 650 } 651 651 d->data.F64[n-2] = (2.0 * x * d->data.F64[n-1]); 652 if( myPoly->mask[n-2] == 0) {653 d->data.F64[n-2] += myPoly->coeff[n-2];652 if(poly->mask[n-2] == 0) { 653 d->data.F64[n-2] += poly->coeff[n-2]; 654 654 } 655 655 for (i=n-3;i>=1;i--) { 656 656 d->data.F64[i] = (2.0 * x * d->data.F64[i+1]) - 657 657 (d->data.F64[i+2]); 658 if( myPoly->mask[i] == 0) {659 d->data.F64[i] += myPoly->coeff[i];658 if(poly->mask[i] == 0) { 659 d->data.F64[i] += poly->coeff[i]; 660 660 } 661 661 } … … 663 663 tmp = (x * d->data.F64[1]) - 664 664 (d->data.F64[2]); 665 if( myPoly->mask[0] == 0) {666 tmp += (0.5 * myPoly->coeff[0]);665 if(poly->mask[0] == 0) { 666 tmp += (0.5 * poly->coeff[0]); 667 667 } 668 668 … … 673 673 static psF64 dOrdPolynomial2DEval(psF64 x, 674 674 psF64 y, 675 const psDPolynomial2D* myPoly)675 const psDPolynomial2D* poly) 676 676 { 677 677 psS32 loop_x = 0; … … 681 681 psF64 ySum = 1.0; 682 682 683 for (loop_x = 0; loop_x < myPoly->nX; loop_x++) {683 for (loop_x = 0; loop_x < poly->nX; loop_x++) { 684 684 ySum = xSum; 685 for (loop_y = 0; loop_y < myPoly->nY; loop_y++) {686 if ( myPoly->mask[loop_x][loop_y] == 0) {687 polySum += ySum * myPoly->coeff[loop_x][loop_y];685 for (loop_y = 0; loop_y < poly->nY; loop_y++) { 686 if (poly->mask[loop_x][loop_y] == 0) { 687 polySum += ySum * poly->coeff[loop_x][loop_y]; 688 688 } 689 689 ySum *= y; … … 695 695 } 696 696 697 static psF64 dChebPolynomial2DEval(psF64 x, psF64 y, const psDPolynomial2D* myPoly)697 static psF64 dChebPolynomial2DEval(psF64 x, psF64 y, const psDPolynomial2D* poly) 698 698 { 699 699 PS_ASSERT_FLOAT_WITHIN_RANGE(x, -1.0, 1.0, 0.0); … … 708 708 // Determine how many Chebyshev polynomials 709 709 // are needed, then create them. 710 maxChebyPoly = myPoly->nX;711 if ( myPoly->nY > maxChebyPoly) {712 maxChebyPoly = myPoly->nY;710 maxChebyPoly = poly->nX; 711 if (poly->nY > maxChebyPoly) { 712 maxChebyPoly = poly->nY; 713 713 } 714 714 chebPolys = createChebyshevPolys(maxChebyPoly); 715 715 716 for (loop_x = 0; loop_x < myPoly->nX; loop_x++) {717 for (loop_y = 0; loop_y < myPoly->nY; loop_y++) {718 if ( myPoly->mask[loop_x][loop_y] == 0) {719 polySum += myPoly->coeff[loop_x][loop_y] *716 for (loop_x = 0; loop_x < poly->nX; loop_x++) { 717 for (loop_y = 0; loop_y < poly->nY; loop_y++) { 718 if (poly->mask[loop_x][loop_y] == 0) { 719 polySum += poly->coeff[loop_x][loop_y] * 720 720 psPolynomial1DEval(chebPolys[loop_x], x) * 721 721 psPolynomial1DEval(chebPolys[loop_y], y); … … 731 731 } 732 732 733 static psF64 dOrdPolynomial3DEval(psF64 x, psF64 y, psF64 z, const psDPolynomial3D* myPoly)733 static psF64 dOrdPolynomial3DEval(psF64 x, psF64 y, psF64 z, const psDPolynomial3D* poly) 734 734 { 735 735 psS32 loop_x = 0; … … 741 741 psF64 zSum = 1.0; 742 742 743 for (loop_x = 0; loop_x < myPoly->nX; loop_x++) {743 for (loop_x = 0; loop_x < poly->nX; loop_x++) { 744 744 ySum = xSum; 745 for (loop_y = 0; loop_y < myPoly->nY; loop_y++) {745 for (loop_y = 0; loop_y < poly->nY; loop_y++) { 746 746 zSum = ySum; 747 for (loop_z = 0; loop_z < myPoly->nZ; loop_z++) {748 if ( myPoly->mask[loop_x][loop_y][loop_z] == 0) {749 polySum += zSum * myPoly->coeff[loop_x][loop_y][loop_z];747 for (loop_z = 0; loop_z < poly->nZ; loop_z++) { 748 if (poly->mask[loop_x][loop_y][loop_z] == 0) { 749 polySum += zSum * poly->coeff[loop_x][loop_y][loop_z]; 750 750 } 751 751 zSum *= z; … … 759 759 } 760 760 761 static psF64 dChebPolynomial3DEval(psF64 x, psF64 y, psF64 z, const psDPolynomial3D* myPoly)761 static psF64 dChebPolynomial3DEval(psF64 x, psF64 y, psF64 z, const psDPolynomial3D* poly) 762 762 { 763 763 PS_ASSERT_FLOAT_WITHIN_RANGE(x, -1.0, 1.0, 0.0); … … 774 774 // Determine how many Chebyshev polynomials 775 775 // are needed, then create them. 776 maxChebyPoly = myPoly->nX;777 if ( myPoly->nY > maxChebyPoly) {778 maxChebyPoly = myPoly->nY;779 } 780 if ( myPoly->nZ > maxChebyPoly) {781 maxChebyPoly = myPoly->nZ;776 maxChebyPoly = poly->nX; 777 if (poly->nY > maxChebyPoly) { 778 maxChebyPoly = poly->nY; 779 } 780 if (poly->nZ > maxChebyPoly) { 781 maxChebyPoly = poly->nZ; 782 782 } 783 783 chebPolys = createChebyshevPolys(maxChebyPoly); 784 784 785 for (loop_x = 0; loop_x < myPoly->nX; loop_x++) {786 for (loop_y = 0; loop_y < myPoly->nY; loop_y++) {787 for (loop_z = 0; loop_z < myPoly->nZ; loop_z++) {788 if ( myPoly->mask[loop_x][loop_y][loop_z] == 0) {789 polySum += myPoly->coeff[loop_x][loop_y][loop_z] *785 for (loop_x = 0; loop_x < poly->nX; loop_x++) { 786 for (loop_y = 0; loop_y < poly->nY; loop_y++) { 787 for (loop_z = 0; loop_z < poly->nZ; loop_z++) { 788 if (poly->mask[loop_x][loop_y][loop_z] == 0) { 789 polySum += poly->coeff[loop_x][loop_y][loop_z] * 790 790 psPolynomial1DEval(chebPolys[loop_x], x) * 791 791 psPolynomial1DEval(chebPolys[loop_y], y) * … … 803 803 } 804 804 805 static psF64 dOrdPolynomial4DEval(psF64 w, psF64 x, psF64 y, psF64 z, const psDPolynomial4D* myPoly) 806 { 807 psS32 loop_w = 0; 805 static psF64 dOrdPolynomial4DEval(psF64 x, psF64 y, psF64 z, psF64 t, const psDPolynomial4D* poly) 806 { 808 807 psS32 loop_x = 0; 809 808 psS32 loop_y = 0; 810 809 psS32 loop_z = 0; 810 psS32 loop_t = 0; 811 811 psF64 polySum = 0.0; 812 psF64 wSum = 1.0;813 812 psF64 xSum = 1.0; 814 813 psF64 ySum = 1.0; 815 814 psF64 zSum = 1.0; 816 817 for (loop_w = 0; loop_w < myPoly->nW; loop_w++) { 818 xSum = wSum; 819 for (loop_x = 0; loop_x < myPoly->nX; loop_x++) { 820 ySum = xSum; 821 for (loop_y = 0; loop_y < myPoly->nY; loop_y++) { 822 zSum = ySum; 823 for (loop_z = 0; loop_z < myPoly->nZ; loop_z++) { 824 if (myPoly->mask[loop_w][loop_x][loop_y][loop_z] == 0) { 825 polySum += zSum * myPoly->coeff[loop_w][loop_x][loop_y][loop_z]; 815 psF64 tSum = 1.0; 816 817 for (loop_x = 0; loop_x < poly->nX; loop_x++) { 818 ySum = xSum; 819 for (loop_y = 0; loop_y < poly->nY; loop_y++) { 820 zSum = ySum; 821 for (loop_z = 0; loop_z < poly->nZ; loop_z++) { 822 tSum = zSum; 823 for (loop_t = 0; loop_t < poly->nT; loop_t++) { 824 if (poly->mask[loop_x][loop_y][loop_z][loop_t] == 0) { 825 polySum += tSum * poly->coeff[loop_x][loop_y][loop_z][loop_t]; 826 826 } 827 zSum *= z;827 tSum *= t; 828 828 } 829 ySum *= y;829 zSum *= z; 830 830 } 831 xSum *= x;832 } 833 wSum *= w;831 ySum *= y; 832 } 833 xSum *= x; 834 834 } 835 835 … … 837 837 } 838 838 839 static psF64 dChebPolynomial4DEval(psF64 w, psF64 x, psF64 y, psF64 z, const psDPolynomial4D* myPoly) 840 { 841 PS_ASSERT_FLOAT_WITHIN_RANGE(w, -1.0, 1.0, 0.0); 839 static psF64 dChebPolynomial4DEval(psF64 x, psF64 y, psF64 z, psF64 t, const psDPolynomial4D* poly) 840 { 842 841 PS_ASSERT_FLOAT_WITHIN_RANGE(x, -1.0, 1.0, 0.0); 843 842 PS_ASSERT_FLOAT_WITHIN_RANGE(y, -1.0, 1.0, 0.0); 844 843 PS_ASSERT_FLOAT_WITHIN_RANGE(z, -1.0, 1.0, 0.0); 845 psS32 loop_w = 0;844 PS_ASSERT_FLOAT_WITHIN_RANGE(t, -1.0, 1.0, 0.0); 846 845 psS32 loop_x = 0; 847 846 psS32 loop_y = 0; 848 847 psS32 loop_z = 0; 848 psS32 loop_t = 0; 849 849 psS32 i = 0; 850 850 psF64 polySum = 0.0; … … 854 854 // Determine how many Chebyshev polynomials 855 855 // are needed, then create them. 856 maxChebyPoly = myPoly->nW;857 if ( myPoly->nX> maxChebyPoly) {858 maxChebyPoly = myPoly->nX;859 } 860 if ( myPoly->nY> maxChebyPoly) {861 maxChebyPoly = myPoly->nY;862 } 863 if ( myPoly->nZ> maxChebyPoly) {864 maxChebyPoly = myPoly->nZ;856 maxChebyPoly = poly->nX; 857 if (poly->nY > maxChebyPoly) { 858 maxChebyPoly = poly->nY; 859 } 860 if (poly->nZ > maxChebyPoly) { 861 maxChebyPoly = poly->nZ; 862 } 863 if (poly->nT > maxChebyPoly) { 864 maxChebyPoly = poly->nT; 865 865 } 866 866 chebPolys = createChebyshevPolys(maxChebyPoly); 867 867 868 for (loop_w = 0; loop_w < myPoly->nW; loop_w++) { 869 for (loop_x = 0; loop_x < myPoly->nX; loop_x++) { 870 for (loop_y = 0; loop_y < myPoly->nY; loop_y++) { 871 for (loop_z = 0; loop_z < myPoly->nZ; loop_z++) { 872 if (myPoly->mask[loop_w][loop_x][loop_y][loop_z] == 0) { 873 polySum += myPoly->coeff[loop_w][loop_x][loop_y][loop_z] * 874 psPolynomial1DEval(chebPolys[loop_w], w) * 868 for (loop_x = 0; loop_x < poly->nX; loop_x++) { 869 for (loop_y = 0; loop_y < poly->nY; loop_y++) { 870 for (loop_z = 0; loop_z < poly->nZ; loop_z++) { 871 for (loop_t = 0; loop_t < poly->nT; loop_t++) { 872 if (poly->mask[loop_x][loop_y][loop_z][loop_t] == 0) { 873 polySum += poly->coeff[loop_x][loop_y][loop_z][loop_t] * 875 874 psPolynomial1DEval(chebPolys[loop_x], x) * 876 875 psPolynomial1DEval(chebPolys[loop_y], y) * 877 psPolynomial1DEval(chebPolys[loop_z], z); 876 psPolynomial1DEval(chebPolys[loop_z], z) * 877 psPolynomial1DEval(chebPolys[loop_t], t); 878 878 } 879 879 } … … 1069 1069 This routine must allocate memory for the polynomial structures. 1070 1070 *****************************************************************************/ 1071 psPolynomial1D* psPolynomial1DAlloc( psS32n,1071 psPolynomial1D* psPolynomial1DAlloc(int n, 1072 1072 psPolynomialType type) 1073 1073 { 1074 1074 PS_ASSERT_INT_POSITIVE(n, NULL); 1075 1075 1076 psS32i = 0;1076 int i = 0; 1077 1077 psPolynomial1D* newPoly = NULL; 1078 1078 … … 1094 1094 } 1095 1095 1096 psPolynomial2D* psPolynomial2DAlloc( psS32 nX, psS32nY,1096 psPolynomial2D* psPolynomial2DAlloc(int nX, int nY, 1097 1097 psPolynomialType type) 1098 1098 { … … 1100 1100 PS_ASSERT_INT_POSITIVE(nY, NULL); 1101 1101 1102 psS32x = 0;1103 psS32y = 0;1102 int x = 0; 1103 int y = 0; 1104 1104 psPolynomial2D* newPoly = NULL; 1105 1105 … … 1130 1130 } 1131 1131 1132 psPolynomial3D* psPolynomial3DAlloc( psS32 nX, psS32 nY, psS32nZ,1132 psPolynomial3D* psPolynomial3DAlloc(int nX, int nY, int nZ, 1133 1133 psPolynomialType type) 1134 1134 { … … 1176 1176 } 1177 1177 1178 psPolynomial4D* psPolynomial4DAlloc( psS32 nW, psS32 nX, psS32 nY, psS32 nZ,1178 psPolynomial4D* psPolynomial4DAlloc(int nX, int nY, int nZ, int nT, 1179 1179 psPolynomialType type) 1180 1180 { 1181 PS_ASSERT_INT_POSITIVE(nW, NULL);1182 1181 PS_ASSERT_INT_POSITIVE(nX, NULL); 1183 1182 PS_ASSERT_INT_POSITIVE(nY, NULL); 1184 1183 PS_ASSERT_INT_POSITIVE(nZ, NULL); 1185 1186 psS32 w = 0; 1184 PS_ASSERT_INT_POSITIVE(nT, NULL); 1185 1187 1186 psS32 x = 0; 1188 1187 psS32 y = 0; 1189 1188 psS32 z = 0; 1189 psS32 t = 0; 1190 1190 psPolynomial4D* newPoly = NULL; 1191 1191 … … 1194 1194 1195 1195 newPoly->type = type; 1196 newPoly->nW = nW;1197 1196 newPoly->nX = nX; 1198 1197 newPoly->nY = nY; 1199 1198 newPoly->nZ = nZ; 1200 1201 newPoly->coeff = (psF32 ****)psAlloc(nW * sizeof(psF32 ***)); 1202 newPoly->coeffErr = (psF32 ****)psAlloc(nW * sizeof(psF32 ***)); 1203 newPoly->mask = (psU8 ****)psAlloc(nW * sizeof(psU8 ***)); 1204 for (w = 0; w < nW; w++) { 1205 newPoly->coeff[w] = (psF32 ***)psAlloc(nX * sizeof(psF32 **)); 1206 newPoly->coeffErr[w] = (psF32 ***)psAlloc(nX * sizeof(psF32 **)); 1207 newPoly->mask[w] = (psU8 ***)psAlloc(nX * sizeof(psU8 **)); 1208 for (x = 0; x < nX; x++) { 1209 newPoly->coeff[w][x] = (psF32 **)psAlloc(nY * sizeof(psF32 *)); 1210 newPoly->coeffErr[w][x] = (psF32 **)psAlloc(nY * sizeof(psF32 *)); 1211 newPoly->mask[w][x] = (psU8 **)psAlloc(nY * sizeof(psU8 *)); 1212 for (y = 0; y < nY; y++) { 1213 newPoly->coeff[w][x][y] = (psF32 *)psAlloc(nZ * sizeof(psF32)); 1214 newPoly->coeffErr[w][x][y] = (psF32 *)psAlloc(nZ * sizeof(psF32)); 1215 newPoly->mask[w][x][y] = (psU8 *)psAlloc(nZ * sizeof(psU8)); 1199 newPoly->nT = nT; 1200 1201 newPoly->coeff = (psF32 ****)psAlloc(nX * sizeof(psF32 ***)); 1202 newPoly->coeffErr = (psF32 ****)psAlloc(nX * sizeof(psF32 ***)); 1203 newPoly->mask = (psU8 ****)psAlloc(nX * sizeof(psU8 ***)); 1204 for (x = 0; x < nX; x++) { 1205 newPoly->coeff[x] = (psF32 ***)psAlloc(nY * sizeof(psF32 **)); 1206 newPoly->coeffErr[x] = (psF32 ***)psAlloc(nY * sizeof(psF32 **)); 1207 newPoly->mask[x] = (psU8 ***)psAlloc(nY * sizeof(psU8 **)); 1208 for (y = 0; y < nY; y++) { 1209 newPoly->coeff[x][y] = (psF32 **)psAlloc(nZ * sizeof(psF32 *)); 1210 newPoly->coeffErr[x][y] = (psF32 **)psAlloc(nZ * sizeof(psF32 *)); 1211 newPoly->mask[x][y] = (psU8 **)psAlloc(nZ * sizeof(psU8 *)); 1212 for (z = 0; z < nZ; z++) { 1213 newPoly->coeff[x][y][z] = (psF32 *)psAlloc(nT * sizeof(psF32)); 1214 newPoly->coeffErr[x][y][z] = (psF32 *)psAlloc(nT * sizeof(psF32)); 1215 newPoly->mask[x][y][z] = (psU8 *)psAlloc(nT * sizeof(psU8)); 1216 1216 } 1217 1217 } 1218 1218 } 1219 for ( w = 0; w < nW; w++) {1220 for ( x = 0; x < nX; x++) {1221 for ( y = 0; y < nY; y++) {1222 for ( z = 0; z < nZ; z++) {1223 newPoly->coeff[ w][x][y][z] = 0.0;1224 newPoly->coeffErr[ w][x][y][z] = 0.0;1225 newPoly->mask[ w][x][y][z] = 0;1219 for (x = 0; x < nX; x++) { 1220 for (y = 0; y < nY; y++) { 1221 for (z = 0; z < nZ; z++) { 1222 for (t = 0; t < nT; t++) { 1223 newPoly->coeff[x][y][z][t] = 0.0; 1224 newPoly->coeffErr[x][y][z][t] = 0.0; 1225 newPoly->mask[x][y][z][t] = 0; 1226 1226 } 1227 1227 } … … 1431 1431 1432 1432 1433 psDPolynomial1D* psDPolynomial1DAlloc( psS32n,1433 psDPolynomial1D* psDPolynomial1DAlloc(int n, 1434 1434 psPolynomialType type) 1435 1435 { 1436 1436 PS_ASSERT_INT_POSITIVE(n, NULL); 1437 1437 1438 psS32i = 0;1438 unsigned int i = 0; 1439 1439 psDPolynomial1D* newPoly = NULL; 1440 1440 … … 1456 1456 } 1457 1457 1458 psDPolynomial2D* psDPolynomial2DAlloc( psS32 nX, psS32nY,1458 psDPolynomial2D* psDPolynomial2DAlloc(int nX, int nY, 1459 1459 psPolynomialType type) 1460 1460 { … … 1462 1462 PS_ASSERT_INT_POSITIVE(nY, NULL); 1463 1463 1464 psS32x = 0;1465 psS32y = 0;1464 unsigned int x = 0; 1465 unsigned int y = 0; 1466 1466 psDPolynomial2D* newPoly = NULL; 1467 1467 … … 1492 1492 } 1493 1493 1494 psDPolynomial3D* psDPolynomial3DAlloc( psS32 nX, psS32 nY, psS32nZ,1494 psDPolynomial3D* psDPolynomial3DAlloc(int nX, int nY, int nZ, 1495 1495 psPolynomialType type) 1496 1496 { … … 1499 1499 PS_ASSERT_INT_POSITIVE(nZ, NULL); 1500 1500 1501 psS32x = 0;1502 psS32y = 0;1503 psS32z = 0;1501 unsigned int x = 0; 1502 unsigned int y = 0; 1503 unsigned int z = 0; 1504 1504 psDPolynomial3D* newPoly = NULL; 1505 1505 … … 1538 1538 } 1539 1539 1540 psDPolynomial4D* psDPolynomial4DAlloc( psS32 nW, psS32 nX, psS32 nY, psS32 nZ,1540 psDPolynomial4D* psDPolynomial4DAlloc(int nX, int nY, int nZ, int nT, 1541 1541 psPolynomialType type) 1542 1542 { 1543 PS_ASSERT_INT_POSITIVE(nW, NULL);1544 1543 PS_ASSERT_INT_POSITIVE(nX, NULL); 1545 1544 PS_ASSERT_INT_POSITIVE(nY, NULL); 1546 1545 PS_ASSERT_INT_POSITIVE(nZ, NULL); 1547 1548 psS32 w = 0; 1549 psS32 x = 0; 1550 psS32 y = 0; 1551 psS32 z = 0; 1546 PS_ASSERT_INT_POSITIVE(nT, NULL); 1547 1548 unsigned int x = 0; 1549 unsigned int y = 0; 1550 unsigned int z = 0; 1551 unsigned int t = 0; 1552 1552 psDPolynomial4D* newPoly = NULL; 1553 1553 … … 1556 1556 1557 1557 newPoly->type = type; 1558 newPoly->nW = nW;1559 1558 newPoly->nX = nX; 1560 1559 newPoly->nY = nY; 1561 1560 newPoly->nZ = nZ; 1562 1563 newPoly->coeff = (psF64 ****)psAlloc(nW * sizeof(psF64 ***)); 1564 newPoly->coeffErr = (psF64 ****)psAlloc(nW * sizeof(psF64 ***)); 1565 newPoly->mask = (psU8 ****)psAlloc(nW * sizeof(psU8 ***)); 1566 for (w = 0; w < nW; w++) { 1567 newPoly->coeff[w] = (psF64 ***)psAlloc(nX * sizeof(psF64 **)); 1568 newPoly->coeffErr[w] = (psF64 ***)psAlloc(nX * sizeof(psF64 **)); 1569 newPoly->mask[w] = (psU8 ***)psAlloc(nX * sizeof(psU8 **)); 1570 for (x = 0; x < nX; x++) { 1571 newPoly->coeff[w][x] = (psF64 **)psAlloc(nY * sizeof(psF64 *)); 1572 newPoly->coeffErr[w][x] = (psF64 **)psAlloc(nY * sizeof(psF64 *)); 1573 newPoly->mask[w][x] = (psU8 **)psAlloc(nY * sizeof(psU8 *)); 1574 for (y = 0; y < nY; y++) { 1575 newPoly->coeff[w][x][y] = (psF64 *)psAlloc(nZ * sizeof(psF64)); 1576 newPoly->coeffErr[w][x][y] = (psF64 *)psAlloc(nZ * sizeof(psF64)); 1577 newPoly->mask[w][x][y] = (psU8 *)psAlloc(nZ * sizeof(psU8)); 1561 newPoly->nT = nT; 1562 1563 newPoly->coeff = (psF64 ****)psAlloc(nX * sizeof(psF64 ***)); 1564 newPoly->coeffErr = (psF64 ****)psAlloc(nX * sizeof(psF64 ***)); 1565 newPoly->mask = (psU8 ****)psAlloc(nX * sizeof(psU8 ***)); 1566 for (x = 0; x < nX; x++) { 1567 newPoly->coeff[x] = (psF64 ***)psAlloc(nY * sizeof(psF64 **)); 1568 newPoly->coeffErr[x] = (psF64 ***)psAlloc(nY * sizeof(psF64 **)); 1569 newPoly->mask[x] = (psU8 ***)psAlloc(nY * sizeof(psU8 **)); 1570 for (y = 0; y < nY; y++) { 1571 newPoly->coeff[x][y] = (psF64 **)psAlloc(nZ * sizeof(psF64 *)); 1572 newPoly->coeffErr[x][y] = (psF64 **)psAlloc(nZ * sizeof(psF64 *)); 1573 newPoly->mask[x][y] = (psU8 **)psAlloc(nZ * sizeof(psU8 *)); 1574 for (z = 0; z < nZ; z++) { 1575 newPoly->coeff[x][y][z] = (psF64 *)psAlloc(nT * sizeof(psF64)); 1576 newPoly->coeffErr[x][y][z] = (psF64 *)psAlloc(nT * sizeof(psF64)); 1577 newPoly->mask[x][y][z] = (psU8 *)psAlloc(nT * sizeof(psU8)); 1578 1578 } 1579 1579 } 1580 1580 } 1581 for ( w = 0; w < nW; w++) {1582 for ( x = 0; x < nX; x++) {1583 for ( y = 0; y < nY; y++) {1584 for ( z = 0; z < nZ; z++) {1585 newPoly->coeff[ w][x][y][z] = 0.0;1586 newPoly->coeffErr[ w][x][y][z] = 0.0;1587 newPoly->mask[ w][x][y][z] = 0;1581 for (x = 0; x < nX; x++) { 1582 for (y = 0; y < nY; y++) { 1583 for (z = 0; z < nZ; z++) { 1584 for (t = 0; t < nT; t++) { 1585 newPoly->coeff[x][y][z][t] = 0.0; 1586 newPoly->coeffErr[x][y][z][t] = 0.0; 1587 newPoly->mask[x][y][z][t] = 0; 1588 1588 } 1589 1589 } … … 1595 1595 1596 1596 1597 psF64 psDPolynomial1DEval(const psDPolynomial1D* myPoly, psF64 x)1598 { 1599 PS_ASSERT_POLY_NON_NULL( myPoly, NAN);1600 1601 if ( myPoly->type == PS_POLYNOMIAL_ORD) {1602 return(dOrdPolynomial1DEval(x, myPoly));1603 } else if ( myPoly->type == PS_POLYNOMIAL_CHEB) {1604 return(dChebPolynomial1DEval(x, myPoly));1597 psF64 psDPolynomial1DEval(const psDPolynomial1D* poly, psF64 x) 1598 { 1599 PS_ASSERT_POLY_NON_NULL(poly, NAN); 1600 1601 if (poly->type == PS_POLYNOMIAL_ORD) { 1602 return(dOrdPolynomial1DEval(x, poly)); 1603 } else if (poly->type == PS_POLYNOMIAL_CHEB) { 1604 return(dChebPolynomial1DEval(x, poly)); 1605 1605 } else { 1606 1606 psError(PS_ERR_BAD_PARAMETER_TYPE, true, 1607 1607 PS_ERRORTEXT_psFunctions_INVALID_POLYNOMIAL_TYPE, 1608 myPoly->type);1608 poly->type); 1609 1609 } 1610 1610 return(NAN); 1611 1611 } 1612 1612 1613 psVector *psDPolynomial1DEvalVector(const psDPolynomial1D * myPoly,1613 psVector *psDPolynomial1DEvalVector(const psDPolynomial1D *poly, 1614 1614 const psVector *x) 1615 1615 1616 1616 { 1617 PS_ASSERT_POLY_NON_NULL( myPoly, NULL);1617 PS_ASSERT_POLY_NON_NULL(poly, NULL); 1618 1618 PS_ASSERT_VECTOR_NON_NULL(x, NULL); 1619 1619 PS_ASSERT_VECTOR_TYPE(x, PS_TYPE_F64, NULL); … … 1623 1623 tmp = psVectorAlloc(x->n, PS_TYPE_F64); 1624 1624 for (psS32 i=0;i<x->n;i++) { 1625 tmp->data.F64[i] = psDPolynomial1DEval( myPoly,1625 tmp->data.F64[i] = psDPolynomial1DEval(poly, 1626 1626 x->data.F64[i]); 1627 1627 } … … 1631 1631 1632 1632 1633 psF64 psDPolynomial2DEval(const psDPolynomial2D* myPoly,1633 psF64 psDPolynomial2DEval(const psDPolynomial2D* poly, 1634 1634 psF64 x, 1635 1635 psF64 y) 1636 1636 { 1637 PS_ASSERT_POLY_NON_NULL( myPoly, NAN);1638 if ( myPoly->type == PS_POLYNOMIAL_ORD) {1639 return(dOrdPolynomial2DEval(x, y, myPoly));1640 } else if ( myPoly->type == PS_POLYNOMIAL_CHEB) {1641 return(dChebPolynomial2DEval(x, y, myPoly));1637 PS_ASSERT_POLY_NON_NULL(poly, NAN); 1638 if (poly->type == PS_POLYNOMIAL_ORD) { 1639 return(dOrdPolynomial2DEval(x, y, poly)); 1640 } else if (poly->type == PS_POLYNOMIAL_CHEB) { 1641 return(dChebPolynomial2DEval(x, y, poly)); 1642 1642 } else { 1643 1643 psError(PS_ERR_BAD_PARAMETER_TYPE, true, 1644 1644 PS_ERRORTEXT_psFunctions_INVALID_POLYNOMIAL_TYPE, 1645 myPoly->type);1645 poly->type); 1646 1646 } 1647 1647 return(NAN); 1648 1648 } 1649 1649 1650 psVector *psDPolynomial2DEvalVector(const psDPolynomial2D * myPoly,1650 psVector *psDPolynomial2DEvalVector(const psDPolynomial2D *poly, 1651 1651 const psVector *x, 1652 1652 const psVector *y) 1653 1653 { 1654 PS_ASSERT_POLY_NON_NULL( myPoly, NULL);1654 PS_ASSERT_POLY_NON_NULL(poly, NULL); 1655 1655 PS_ASSERT_VECTOR_NON_NULL(x, NULL); 1656 1656 PS_ASSERT_VECTOR_TYPE(x, PS_TYPE_F64, NULL); … … 1671 1671 // Evaluate the polynomial 1672 1672 for (psS32 i = 0; i < vecLen; i++) { 1673 tmp->data.F64[i] = psDPolynomial2DEval( myPoly,x->data.F64[i],y->data.F64[i]);1673 tmp->data.F64[i] = psDPolynomial2DEval(poly,x->data.F64[i],y->data.F64[i]); 1674 1674 } 1675 1675 … … 1679 1679 1680 1680 1681 psF64 psDPolynomial3DEval(const psDPolynomial3D* myPoly,1681 psF64 psDPolynomial3DEval(const psDPolynomial3D* poly, 1682 1682 psF64 x, 1683 1683 psF64 y, 1684 1684 psF64 z) 1685 1685 { 1686 PS_ASSERT_POLY_NON_NULL( myPoly, NAN);1687 1688 if ( myPoly->type == PS_POLYNOMIAL_ORD) {1689 return(dOrdPolynomial3DEval(x, y, z, myPoly));1690 } else if ( myPoly->type == PS_POLYNOMIAL_CHEB) {1691 return(dChebPolynomial3DEval(x, y, z, myPoly));1686 PS_ASSERT_POLY_NON_NULL(poly, NAN); 1687 1688 if (poly->type == PS_POLYNOMIAL_ORD) { 1689 return(dOrdPolynomial3DEval(x, y, z, poly)); 1690 } else if (poly->type == PS_POLYNOMIAL_CHEB) { 1691 return(dChebPolynomial3DEval(x, y, z, poly)); 1692 1692 } else { 1693 1693 psError(PS_ERR_BAD_PARAMETER_TYPE, true, 1694 1694 PS_ERRORTEXT_psFunctions_INVALID_POLYNOMIAL_TYPE, 1695 myPoly->type);1695 poly->type); 1696 1696 } 1697 1697 return(NAN); 1698 1698 } 1699 1699 1700 psVector *psDPolynomial3DEvalVector(const psDPolynomial3D * myPoly,1700 psVector *psDPolynomial3DEvalVector(const psDPolynomial3D *poly, 1701 1701 const psVector *x, 1702 1702 const psVector *y, … … 1704 1704 1705 1705 { 1706 PS_ASSERT_POLY_NON_NULL( myPoly, NULL);1706 PS_ASSERT_POLY_NON_NULL(poly, NULL); 1707 1707 PS_ASSERT_VECTOR_NON_NULL(x, NULL); 1708 1708 PS_ASSERT_VECTOR_TYPE(x, PS_TYPE_F64, NULL); … … 1728 1728 // Evaluate polynomial 1729 1729 for (psS32 i = 0; i < vecLen; i++) { 1730 tmp->data.F64[i] = psDPolynomial3DEval( myPoly,1730 tmp->data.F64[i] = psDPolynomial3DEval(poly, 1731 1731 x->data.F64[i], 1732 1732 y->data.F64[i], … … 1738 1738 } 1739 1739 1740 psF64 psDPolynomial4DEval(const psDPolynomial4D* myPoly, 1741 psF64 w, 1740 psF64 psDPolynomial4DEval(const psDPolynomial4D* poly, 1742 1741 psF64 x, 1743 1742 psF64 y, 1744 psF64 z) 1745 { 1746 PS_ASSERT_POLY_NON_NULL(myPoly, NAN); 1747 1748 if (myPoly->type == PS_POLYNOMIAL_ORD) { 1749 return(dOrdPolynomial4DEval(w,x,y,z, myPoly)); 1750 } else if (myPoly->type == PS_POLYNOMIAL_CHEB) { 1751 return(dChebPolynomial4DEval(w,x,y,z, myPoly)); 1743 psF64 z, 1744 psF64 t) 1745 { 1746 PS_ASSERT_POLY_NON_NULL(poly, NAN); 1747 1748 if (poly->type == PS_POLYNOMIAL_ORD) { 1749 return(dOrdPolynomial4DEval(x,y,z,t, poly)); 1750 } else if (poly->type == PS_POLYNOMIAL_CHEB) { 1751 return(dChebPolynomial4DEval(x,y,z,t, poly)); 1752 1752 } else { 1753 1753 psError(PS_ERR_BAD_PARAMETER_TYPE, true, 1754 1754 PS_ERRORTEXT_psFunctions_INVALID_POLYNOMIAL_TYPE, 1755 myPoly->type);1755 poly->type); 1756 1756 } 1757 1757 return(NAN); 1758 1758 } 1759 1759 1760 psVector *psDPolynomial4DEvalVector(const psDPolynomial4D *myPoly, 1761 const psVector *w, 1760 psVector *psDPolynomial4DEvalVector(const psDPolynomial4D *poly, 1762 1761 const psVector *x, 1763 1762 const psVector *y, 1764 const psVector *z) 1765 { 1766 PS_ASSERT_POLY_NON_NULL(myPoly, NULL); 1767 PS_ASSERT_VECTOR_NON_NULL(w, NULL); 1768 PS_ASSERT_VECTOR_TYPE(w, PS_TYPE_F64, NULL); 1763 const psVector *z, 1764 const psVector *t) 1765 { 1766 PS_ASSERT_POLY_NON_NULL(poly, NULL); 1769 1767 PS_ASSERT_VECTOR_NON_NULL(x, NULL); 1770 1768 PS_ASSERT_VECTOR_TYPE(x, PS_TYPE_F64, NULL); … … 1773 1771 PS_ASSERT_VECTOR_NON_NULL(z, NULL); 1774 1772 PS_ASSERT_VECTOR_TYPE(z, PS_TYPE_F64, NULL); 1773 PS_ASSERT_VECTOR_NON_NULL(t, NULL); 1774 PS_ASSERT_VECTOR_TYPE(t, PS_TYPE_F64, NULL); 1775 1775 1776 1776 psVector *tmp; 1777 psS32 vecLen= w->n;1777 psS32 vecLen=x->n; 1778 1778 1779 1779 // Determine the output vector size from min of input vectors 1780 if (z->n < vecLen) { 1781 vecLen = z->n; 1782 } 1780 1783 if (y->n < vecLen) { 1781 1784 vecLen = y->n; 1782 1785 } 1783 if (x->n < vecLen) { 1784 vecLen = x->n; 1785 } 1786 if (z->n < vecLen) { 1787 vecLen = z->n; 1786 if (t->n < vecLen) { 1787 vecLen = t->n; 1788 1788 } 1789 1789 … … 1793 1793 // Evaluate the polynomial 1794 1794 for (psS32 i = 0; i < vecLen; i++) { 1795 tmp->data.F64[i] = psDPolynomial4DEval(myPoly, 1796 w->data.F64[i], 1795 tmp->data.F64[i] = psDPolynomial4DEval(poly, 1797 1796 x->data.F64[i], 1798 1797 y->data.F64[i], 1799 z->data.F64[i]); 1798 z->data.F64[i], 1799 t->data.F64[i]); 1800 1800 } 1801 1801 -
trunk/psLib/src/dataManip/psFunctions.h
r4405 r4422 12 12 * @author GLG, MHPCC 13 13 * 14 * @version $Revision: 1. 49$ $Name: not supported by cvs2svn $15 * @date $Date: 2005-06-2 8 00:53:53$14 * @version $Revision: 1.50 $ $Name: not supported by cvs2svn $ 15 * @date $Date: 2005-06-29 00:43:46 $ 16 16 * 17 17 * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii … … 74 74 { 75 75 psPolynomialType type; ///< Polynomial type 76 psS32 n;///< Number of terms76 unsigned int n; ///< Number of terms 77 77 psF32 *coeff; ///< Coefficients 78 78 psF32 *coeffErr; ///< Error in coefficients … … 85 85 { 86 86 psPolynomialType type; ///< Polynomial type 87 psS32 nX;///< Number of terms in x88 psS32 nY;///< Number of terms in y87 unsigned int nX; ///< Number of terms in x 88 unsigned int nY; ///< Number of terms in y 89 89 psF32 **coeff; ///< Coefficients 90 90 psF32 **coeffErr; ///< Error in coefficients … … 97 97 { 98 98 psPolynomialType type; ///< Polynomial type 99 psS32 nX;///< Number of terms in x100 psS32 nY;///< Number of terms in y101 psS32 nZ;///< Number of terms in z99 unsigned int nX; ///< Number of terms in x 100 unsigned int nY; ///< Number of terms in y 101 unsigned int nZ; ///< Number of terms in z 102 102 psF32 ***coeff; ///< Coefficients 103 103 psF32 ***coeffErr; ///< Error in coefficients … … 110 110 { 111 111 psPolynomialType type; ///< Polynomial type 112 psS32 nW; ///< Number of terms in w113 psS32 nX; ///< Number of terms in x114 psS32 nY; ///< Number of terms in y115 psS32 nZ; ///< Number of terms in z112 unsigned int nX; ///< Number of terms in x 113 unsigned int nY; ///< Number of terms in y 114 unsigned int nZ; ///< Number of terms in z 115 unsigned int nT; ///< Number of terms in t 116 116 psF32 ****coeff; ///< Coefficients 117 117 psF32 ****coeffErr; ///< Error in coefficients … … 126 126 */ 127 127 psPolynomial1D* psPolynomial1DAlloc( 128 psS32 n,///< Number of terms128 int n, ///< Number of terms 129 129 psPolynomialType type ///< Polynomial Type 130 130 ); … … 135 135 */ 136 136 psPolynomial2D* psPolynomial2DAlloc( 137 psS32 nX,///< Number of terms in x138 psS32 nY,///< Number of terms in y137 int nX, ///< Number of terms in x 138 int nY, ///< Number of terms in y 139 139 psPolynomialType type ///< Polynomial Type 140 140 ); … … 145 145 */ 146 146 psPolynomial3D* psPolynomial3DAlloc( 147 psS32 nX,///< Number of terms in x148 psS32 nY,///< Number of terms in y149 psS32 nZ,///< Number of terms in z147 int nX, ///< Number of terms in x 148 int nY, ///< Number of terms in y 149 int nZ, ///< Number of terms in z 150 150 psPolynomialType type ///< Polynomial Type 151 151 ); … … 156 156 */ 157 157 psPolynomial4D* psPolynomial4DAlloc( 158 psS32 nW, ///< Number of terms in w159 psS32 nX, ///< Number of terms in x160 psS32 nY, ///< Number of terms in y161 psS32 nZ, ///< Number of terms in z158 int nX, ///< Number of terms in x 159 int nY, ///< Number of terms in y 160 int nZ, ///< Number of terms in z 161 int nT, ///< Number of terms in t 162 162 psPolynomialType type ///< Polynomial Type 163 163 ); … … 177 177 */ 178 178 psF64 psPolynomial2DEval( 179 const psPolynomial2D* poly, ///< Coefficients for the polynomial180 psF64 x, ///< x location at which to evaluate181 psF64 y ///< y location at which to evaluate179 const psPolynomial2D* poly, ///< Coefficients for the polynomial 180 psF64 x, ///< x location at which to evaluate 181 psF64 y ///< y location at which to evaluate 182 182 ); 183 183 … … 255 255 { 256 256 psPolynomialType type; ///< Polynomial type 257 psS32n; ///< Number of terms257 unsigned int n; ///< Number of terms 258 258 psF64 *coeff; ///< Coefficients 259 259 psF64 *coeffErr; ///< Error in coefficients … … 266 266 { 267 267 psPolynomialType type; ///< Polynomial type 268 psS32nX; ///< Number of terms in x269 psS32nY; ///< Number of terms in y268 unsigned int nX; ///< Number of terms in x 269 unsigned int nY; ///< Number of terms in y 270 270 psF64 **coeff; ///< Coefficients 271 271 psF64 **coeffErr; ///< Error in coefficients … … 278 278 { 279 279 psPolynomialType type; ///< Polynomial type 280 psS32nX; ///< Number of terms in x281 psS32nY; ///< Number of terms in y282 psS32nZ; ///< Number of terms in z280 unsigned int nX; ///< Number of terms in x 281 unsigned int nY; ///< Number of terms in y 282 unsigned int nZ; ///< Number of terms in z 283 283 psF64 ***coeff; ///< Coefficients 284 284 psF64 ***coeffErr; ///< Error in coefficients … … 291 291 { 292 292 psPolynomialType type; ///< Polynomial type 293 psS32 nW; ///< Number of terms in w294 psS32 nX; ///< Number of terms in x295 psS32 nY; ///< Number of terms in y296 psS32 nZ; ///< Number of terms in z293 unsigned int nX; ///< Number of terms in w 294 unsigned int nY; ///< Number of terms in x 295 unsigned int nZ; ///< Number of terms in y 296 unsigned int nT; ///< Number of terms in z 297 297 psF64 ****coeff; ///< Coefficients 298 298 psF64 ****coeffErr; ///< Error in coefficients … … 306 306 */ 307 307 psDPolynomial1D* psDPolynomial1DAlloc( 308 psS32n, ///< Number of terms308 int n, ///< Number of terms 309 309 psPolynomialType type ///< Polynomial Type 310 310 ); … … 315 315 */ 316 316 psDPolynomial2D* psDPolynomial2DAlloc( 317 psS32nX, ///< Number of terms in x318 psS32nY, ///< Number of terms in y317 int nX, ///< Number of terms in x 318 int nY, ///< Number of terms in y 319 319 psPolynomialType type ///< Polynomial Type 320 320 ); … … 325 325 */ 326 326 psDPolynomial3D* psDPolynomial3DAlloc( 327 psS32nX, ///< Number of terms in x328 psS32nY, ///< Number of terms in y329 psS32nZ, ///< Number of terms in z327 int nX, ///< Number of terms in x 328 int nY, ///< Number of terms in y 329 int nZ, ///< Number of terms in z 330 330 psPolynomialType type ///< Polynomial Type 331 331 ); … … 336 336 */ 337 337 psDPolynomial4D* psDPolynomial4DAlloc( 338 psS32 nW, ///< Number of terms in w339 psS32 nX, ///< Number of terms in x340 psS32 nY, ///< Number of terms in y341 psS32 nZ, ///< Number of terms in z338 int nX, ///< Number of terms in w 339 int nY, ///< Number of terms in x 340 int nZ, ///< Number of terms in y 341 int nT, ///< Number of terms in z 342 342 psPolynomialType type ///< Polynomial Type 343 343 ); … … 348 348 */ 349 349 psF64 psDPolynomial1DEval( 350 const psDPolynomial1D* myPoly, ///< Coefficients for the polynomial350 const psDPolynomial1D* poly, ///< Coefficients for the polynomial 351 351 psF64 x ///< Value at which to evaluate 352 352 ); … … 357 357 */ 358 358 psF64 psDPolynomial2DEval( 359 const psDPolynomial2D* myPoly, ///< Coefficients for the polynomial359 const psDPolynomial2D* poly, ///< Coefficients for the polynomial 360 360 psF64 x, ///< Value x at which to evaluate 361 361 psF64 y ///< Value y at which to evaluate … … 367 367 */ 368 368 psF64 psDPolynomial3DEval( 369 const psDPolynomial3D* myPoly, ///< Coefficients for the polynomial369 const psDPolynomial3D* poly, ///< Coefficients for the polynomial 370 370 psF64 x, ///< Value x at which to evaluate 371 371 psF64 y, ///< Value y at which to evaluate … … 378 378 */ 379 379 psF64 psDPolynomial4DEval( 380 const psDPolynomial4D* myPoly, ///< Coefficients for the polynomial381 psF64 w, ///< Value w at which to evaluate382 psF64 x, ///< Value x at which to evaluate383 psF64 y, ///< Value y at which to evaluate384 psF64 z///< Value z at which to evaluate380 const psDPolynomial4D* poly, ///< Coefficients for the polynomial 381 psF64 x, ///< Value w at which to evaluate 382 psF64 y, ///< Value x at which to evaluate 383 psF64 z, ///< Value y at which to evaluate 384 psF64 t ///< Value z at which to evaluate 385 385 ); 386 386 … … 390 390 */ 391 391 psVector *psDPolynomial1DEvalVector( 392 const psDPolynomial1D * myPoly, ///< Coefficients for the polynomial392 const psDPolynomial1D *poly, ///< Coefficients for the polynomial 393 393 const psVector *x ///< x locations at which to evaluate 394 394 ); … … 399 399 */ 400 400 psVector *psDPolynomial2DEvalVector( 401 const psDPolynomial2D * myPoly, ///< Coefficients for the polynomial401 const psDPolynomial2D *poly, ///< Coefficients for the polynomial 402 402 const psVector *x, ///< x locations at which to evaluate 403 403 const psVector *y ///< y locations at which to evaluate … … 409 409 */ 410 410 psVector *psDPolynomial3DEvalVector( 411 const psDPolynomial3D * myPoly, ///< Coefficients for the polynomial411 const psDPolynomial3D *poly, ///< Coefficients for the polynomial 412 412 const psVector *x, ///< x locations at which to evaluate 413 413 const psVector *y, ///< y locations at which to evaluate … … 420 420 */ 421 421 psVector *psDPolynomial4DEvalVector( 422 const psDPolynomial4D * myPoly, ///< Coefficients for the polynomial423 const psVector * w, ///< w locations at which to evaluate424 const psVector * x, ///< x locations at which to evaluate425 const psVector * y, ///< y locations at which to evaluate426 const psVector * z///< z locations at which to evaluate422 const psDPolynomial4D *poly, ///< Coefficients for the polynomial 423 const psVector *x, ///< w locations at which to evaluate 424 const psVector *y, ///< x locations at which to evaluate 425 const psVector *z, ///< y locations at which to evaluate 426 const psVector *t ///< z locations at which to evaluate 427 427 ); 428 428 -
trunk/psLib/src/math/psPolynomial.c
r4405 r4422 7 7 * polynomials. It also contains a Gaussian functions. 8 8 * 9 * @version $Revision: 1.11 2$ $Name: not supported by cvs2svn $10 * @date $Date: 2005-06-2 8 00:53:53$9 * @version $Revision: 1.113 $ $Name: not supported by cvs2svn $ 10 * @date $Date: 2005-06-29 00:43:46 $ 11 11 * 12 12 * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii … … 46 46 /* TYPE DEFINITIONS */ 47 47 /*****************************************************************************/ 48 static void polynomial1DFree(psPolynomial1D* myPoly);49 static void polynomial2DFree(psPolynomial2D* myPoly);50 static void polynomial3DFree(psPolynomial3D* myPoly);51 static void polynomial4DFree(psPolynomial4D* myPoly);52 static void dPolynomial1DFree(psDPolynomial1D* myPoly);53 static void dPolynomial2DFree(psDPolynomial2D* myPoly);54 static void dPolynomial3DFree(psDPolynomial3D* myPoly);55 static void dPolynomial4DFree(psDPolynomial4D* myPoly);48 static void polynomial1DFree(psPolynomial1D* poly); 49 static void polynomial2DFree(psPolynomial2D* poly); 50 static void polynomial3DFree(psPolynomial3D* poly); 51 static void polynomial4DFree(psPolynomial4D* poly); 52 static void dPolynomial1DFree(psDPolynomial1D* poly); 53 static void dPolynomial2DFree(psDPolynomial2D* poly); 54 static void dPolynomial3DFree(psDPolynomial3D* poly); 55 static void dPolynomial4DFree(psDPolynomial4D* poly); 56 56 static void spline1DFree(psSpline1D *tmpSpline); 57 57 static psS32 vectorBinDisectF32(psF32 *bins,psS32 numBins,psF32 x); … … 97 97 } 98 98 99 static void polynomial1DFree(psPolynomial1D* myPoly)100 { 101 psFree( myPoly->coeff);102 psFree( myPoly->coeffErr);103 psFree( myPoly->mask);104 } 105 106 static void polynomial2DFree(psPolynomial2D* myPoly)107 { 108 psS32x = 0;109 110 for (x = 0; x < myPoly->nX; x++) {111 psFree( myPoly->coeff[x]);112 psFree( myPoly->coeffErr[x]);113 psFree( myPoly->mask[x]);114 } 115 psFree( myPoly->coeff);116 psFree( myPoly->coeffErr);117 psFree( myPoly->mask);118 } 119 120 static void polynomial3DFree(psPolynomial3D* myPoly)121 { 122 psS32x = 0;123 psS32y = 0;124 125 for (x = 0; x < myPoly->nX; x++) {126 for (y = 0; y < myPoly->nY; y++) {127 psFree( myPoly->coeff[x][y]);128 psFree( myPoly->coeffErr[x][y]);129 psFree( myPoly->mask[x][y]);130 } 131 psFree( myPoly->coeff[x]);132 psFree( myPoly->coeffErr[x]);133 psFree( myPoly->mask[x]);134 } 135 136 psFree( myPoly->coeff);137 psFree( myPoly->coeffErr);138 psFree( myPoly->mask);139 } 140 141 static void polynomial4DFree(psPolynomial4D* myPoly)142 { 143 psS32 w= 0;144 psS32 x= 0;145 psS32 y= 0;146 147 for ( w = 0; w < myPoly->nW; w++) {148 for ( x = 0; x < myPoly->nX; x++) {149 for ( y = 0; y < myPoly->nY; y++) {150 psFree( myPoly->coeff[w][x][y]);151 psFree( myPoly->coeffErr[w][x][y]);152 psFree( myPoly->mask[w][x][y]);99 static void polynomial1DFree(psPolynomial1D* poly) 100 { 101 psFree(poly->coeff); 102 psFree(poly->coeffErr); 103 psFree(poly->mask); 104 } 105 106 static void polynomial2DFree(psPolynomial2D* poly) 107 { 108 unsigned int x = 0; 109 110 for (x = 0; x < poly->nX; x++) { 111 psFree(poly->coeff[x]); 112 psFree(poly->coeffErr[x]); 113 psFree(poly->mask[x]); 114 } 115 psFree(poly->coeff); 116 psFree(poly->coeffErr); 117 psFree(poly->mask); 118 } 119 120 static void polynomial3DFree(psPolynomial3D* poly) 121 { 122 unsigned int x = 0; 123 unsigned int y = 0; 124 125 for (x = 0; x < poly->nX; x++) { 126 for (y = 0; y < poly->nY; y++) { 127 psFree(poly->coeff[x][y]); 128 psFree(poly->coeffErr[x][y]); 129 psFree(poly->mask[x][y]); 130 } 131 psFree(poly->coeff[x]); 132 psFree(poly->coeffErr[x]); 133 psFree(poly->mask[x]); 134 } 135 136 psFree(poly->coeff); 137 psFree(poly->coeffErr); 138 psFree(poly->mask); 139 } 140 141 static void polynomial4DFree(psPolynomial4D* poly) 142 { 143 unsigned int x = 0; 144 unsigned int y = 0; 145 unsigned int z = 0; 146 147 for (x = 0; x < poly->nX; x++) { 148 for (y = 0; y < poly->nY; y++) { 149 for (z = 0; z < poly->nZ; z++) { 150 psFree(poly->coeff[x][y][z]); 151 psFree(poly->coeffErr[x][y][z]); 152 psFree(poly->mask[x][y][z]); 153 153 } 154 psFree( myPoly->coeff[w][x]);155 psFree( myPoly->coeffErr[w][x]);156 psFree( myPoly->mask[w][x]);157 } 158 psFree( myPoly->coeff[w]);159 psFree( myPoly->coeffErr[w]);160 psFree( myPoly->mask[w]);161 } 162 163 psFree( myPoly->coeff);164 psFree( myPoly->coeffErr);165 psFree( myPoly->mask);166 } 167 168 static void dPolynomial1DFree(psDPolynomial1D* myPoly)169 { 170 psFree( myPoly->coeff);171 psFree( myPoly->coeffErr);172 psFree( myPoly->mask);173 } 174 175 static void dPolynomial2DFree(psDPolynomial2D* myPoly)176 { 177 for ( psS32 x = 0; x < myPoly->nX; x++) {178 psFree( myPoly->coeff[x]);179 psFree( myPoly->coeffErr[x]);180 psFree( myPoly->mask[x]);181 } 182 psFree( myPoly->coeff);183 psFree( myPoly->coeffErr);184 psFree( myPoly->mask);185 } 186 187 static void dPolynomial3DFree(psDPolynomial3D* myPoly)188 { 189 psS32x = 0;190 psS32y = 0;191 192 for (x = 0; x < myPoly->nX; x++) {193 for (y = 0; y < myPoly->nY; y++) {194 psFree( myPoly->coeff[x][y]);195 psFree( myPoly->coeffErr[x][y]);196 psFree( myPoly->mask[x][y]);197 } 198 psFree( myPoly->coeff[x]);199 psFree( myPoly->coeffErr[x]);200 psFree( myPoly->mask[x]);201 } 202 203 psFree( myPoly->coeff);204 psFree( myPoly->coeffErr);205 psFree( myPoly->mask);206 } 207 208 static void dPolynomial4DFree(psDPolynomial4D* myPoly)209 { 210 psS32 w= 0;211 psS32 x= 0;212 psS32 y= 0;213 214 for ( w = 0; w < myPoly->nW; w++) {215 for ( x = 0; x < myPoly->nX; x++) {216 for ( y = 0; y < myPoly->nY; y++) {217 psFree( myPoly->coeff[w][x][y]);218 psFree( myPoly->coeffErr[w][x][y]);219 psFree( myPoly->mask[w][x][y]);154 psFree(poly->coeff[x][y]); 155 psFree(poly->coeffErr[x][y]); 156 psFree(poly->mask[x][y]); 157 } 158 psFree(poly->coeff[x]); 159 psFree(poly->coeffErr[x]); 160 psFree(poly->mask[x]); 161 } 162 163 psFree(poly->coeff); 164 psFree(poly->coeffErr); 165 psFree(poly->mask); 166 } 167 168 static void dPolynomial1DFree(psDPolynomial1D* poly) 169 { 170 psFree(poly->coeff); 171 psFree(poly->coeffErr); 172 psFree(poly->mask); 173 } 174 175 static void dPolynomial2DFree(psDPolynomial2D* poly) 176 { 177 for (unsigned int x = 0; x < poly->nX; x++) { 178 psFree(poly->coeff[x]); 179 psFree(poly->coeffErr[x]); 180 psFree(poly->mask[x]); 181 } 182 psFree(poly->coeff); 183 psFree(poly->coeffErr); 184 psFree(poly->mask); 185 } 186 187 static void dPolynomial3DFree(psDPolynomial3D* poly) 188 { 189 unsigned int x = 0; 190 unsigned int y = 0; 191 192 for (x = 0; x < poly->nX; x++) { 193 for (y = 0; y < poly->nY; y++) { 194 psFree(poly->coeff[x][y]); 195 psFree(poly->coeffErr[x][y]); 196 psFree(poly->mask[x][y]); 197 } 198 psFree(poly->coeff[x]); 199 psFree(poly->coeffErr[x]); 200 psFree(poly->mask[x]); 201 } 202 203 psFree(poly->coeff); 204 psFree(poly->coeffErr); 205 psFree(poly->mask); 206 } 207 208 static void dPolynomial4DFree(psDPolynomial4D* poly) 209 { 210 unsigned int x = 0; 211 unsigned int y = 0; 212 unsigned int z = 0; 213 214 for (x = 0; x < poly->nX; x++) { 215 for (y = 0; y < poly->nY; y++) { 216 for (z = 0; z < poly->nZ; z++) { 217 psFree(poly->coeff[x][y][z]); 218 psFree(poly->coeffErr[x][y][z]); 219 psFree(poly->mask[x][y][z]); 220 220 } 221 psFree( myPoly->coeff[w][x]);222 psFree( myPoly->coeffErr[w][x]);223 psFree( myPoly->mask[w][x]);224 } 225 psFree( myPoly->coeff[w]);226 psFree( myPoly->coeffErr[w]);227 psFree( myPoly->mask[w]);228 } 229 230 psFree( myPoly->coeff);231 psFree( myPoly->coeffErr);232 psFree( myPoly->mask);221 psFree(poly->coeff[x][y]); 222 psFree(poly->coeffErr[x][y]); 223 psFree(poly->mask[x][y]); 224 } 225 psFree(poly->coeff[x]); 226 psFree(poly->coeffErr[x]); 227 psFree(poly->mask[x]); 228 } 229 230 psFree(poly->coeff); 231 psFree(poly->coeffErr); 232 psFree(poly->mask); 233 233 } 234 234 … … 280 280 Polynomial coefficients will be accessed in [w][x][y][z] fashion. 281 281 *****************************************************************************/ 282 static psF32 ordPolynomial1DEval(psF32 x, const psPolynomial1D* myPoly)282 static psF32 ordPolynomial1DEval(psF32 x, const psPolynomial1D* poly) 283 283 { 284 284 psS32 loop_x = 0; … … 289 289 "---- Calling ordPolynomial1DEval(%f)\n", x); 290 290 psTrace(".psLib.dataManip.psFunctions.ordPolynomial1DEval", 4, 291 "Polynomial order is %d\n", myPoly->n);292 for (loop_x = 0; loop_x < myPoly->n; loop_x++) {291 "Polynomial order is %d\n", poly->n); 292 for (loop_x = 0; loop_x < poly->n; loop_x++) { 293 293 psTrace(".psLib.dataManip.psFunctions.ordPolynomial1DEval", 4, 294 "Polynomial coeff[%d] is %f\n", loop_x, myPoly->coeff[loop_x]);295 } 296 297 for (loop_x = 0; loop_x < myPoly->n; loop_x++) {298 if ( myPoly->mask[loop_x] == 0) {294 "Polynomial coeff[%d] is %f\n", loop_x, poly->coeff[loop_x]); 295 } 296 297 for (loop_x = 0; loop_x < poly->n; loop_x++) { 298 if (poly->mask[loop_x] == 0) { 299 299 psTrace(".psLib.dataManip.psFunctions.ordPolynomial1DEval", 10, 300 "polysum+= sum*coeff [%f+= (%f * %f)\n", polySum, xSum, myPoly->coeff[loop_x]);301 polySum += xSum * myPoly->coeff[loop_x];300 "polysum+= sum*coeff [%f+= (%f * %f)\n", polySum, xSum, poly->coeff[loop_x]); 301 polySum += xSum * poly->coeff[loop_x]; 302 302 } 303 303 xSum *= x; … … 310 310 // XXX: How does the mask vector effect Crenshaw's formula? 311 311 // XXX: We assume that x is scaled between -1.0 and 1.0; 312 static psF32 chebPolynomial1DEval(psF32 x, const psPolynomial1D* myPoly)312 static psF32 chebPolynomial1DEval(psF32 x, const psPolynomial1D* poly) 313 313 { 314 314 PS_ASSERT_FLOAT_WITHIN_RANGE(x, -1.0, 1.0, 0.0); 315 315 // XXX: Create a macro for this in psConstants.h 316 if ( myPoly->n < 1) {317 psError(PS_ERR_BAD_PARAMETER_VALUE, true, "Error: Chebyshev polynomial as order %d.", myPoly->n);316 if (poly->n < 1) { 317 psError(PS_ERR_BAD_PARAMETER_VALUE, true, "Error: Chebyshev polynomial as order %d.", poly->n); 318 318 return(NAN); 319 319 } 320 320 psVector *d; 321 psS32 n = myPoly->n;321 psS32 n = poly->n; 322 322 psS32 i; 323 323 psF32 tmp = 0.0; … … 325 325 // Special case where the Chebyshev poly is constant. 326 326 if (n == 1) { 327 if ( myPoly->mask[0] == 0) {328 tmp += myPoly->coeff[0];327 if (poly->mask[0] == 0) { 328 tmp += poly->coeff[0]; 329 329 } 330 330 return(tmp); … … 333 333 // Special case where the Chebyshev poly is linear. 334 334 if (n == 2) { 335 if ( myPoly->mask[0] == 0) {336 tmp+= myPoly->coeff[0];337 } 338 if ( myPoly->mask[1] == 0) {339 tmp+= myPoly->coeff[1] * x;335 if (poly->mask[0] == 0) { 336 tmp+= poly->coeff[0]; 337 } 338 if (poly->mask[1] == 0) { 339 tmp+= poly->coeff[1] * x; 340 340 } 341 341 return(tmp); … … 344 344 // General case where the Chebyshev poly has 2 or more terms. 345 345 d = psVectorAlloc(n, PS_TYPE_F32); 346 if( myPoly->mask[n-1] == 0) {347 d->data.F32[n-1] = myPoly->coeff[n-1];346 if(poly->mask[n-1] == 0) { 347 d->data.F32[n-1] = poly->coeff[n-1]; 348 348 } else { 349 349 d->data.F32[n-1] = 0.0; … … 351 351 352 352 d->data.F32[n-2] = (2.0 * x * d->data.F32[n-1]); 353 if( myPoly->mask[n-2] == 0) {354 d->data.F32[n-2] += myPoly->coeff[n-2];353 if(poly->mask[n-2] == 0) { 354 d->data.F32[n-2] += poly->coeff[n-2]; 355 355 } 356 356 … … 358 358 d->data.F32[i] = (2.0 * x * d->data.F32[i+1]) - 359 359 (d->data.F32[i+2]); 360 if( myPoly->mask[i] == 0) {361 d->data.F32[i] += myPoly->coeff[i];360 if(poly->mask[i] == 0) { 361 d->data.F32[i] += poly->coeff[i]; 362 362 } 363 363 } … … 365 365 tmp = (x * d->data.F32[1]) - 366 366 (d->data.F32[2]); 367 if( myPoly->mask[0] == 0) {368 tmp += (0.5 * myPoly->coeff[0]);367 if(poly->mask[0] == 0) { 368 tmp += (0.5 * poly->coeff[0]); 369 369 } 370 370 psFree(d); … … 378 378 psPolynomial1D **chebPolys = NULL; 379 379 380 n = myPoly->n;380 n = poly->n; 381 381 chebPolys = createChebyshevPolys(n); 382 382 383 383 tmp = 0.0; 384 for (i=0;i< myPoly->n;i++) {385 tmp+= ( myPoly->coeff[i] * psPolynomial1DEval(x, chebPolys[i]));386 } 387 tmp-= ( myPoly->coeff[0]/2.0);384 for (i=0;i<poly->n;i++) { 385 tmp+= (poly->coeff[i] * psPolynomial1DEval(x, chebPolys[i])); 386 } 387 tmp-= (poly->coeff[0]/2.0); 388 388 389 389 … … 394 394 static psF32 ordPolynomial2DEval(psF32 x, 395 395 psF32 y, 396 const psPolynomial2D* myPoly)397 { 398 PS_ASSERT_POLY_NON_NULL( myPoly, NAN);396 const psPolynomial2D* poly) 397 { 398 PS_ASSERT_POLY_NON_NULL(poly, NAN); 399 399 400 400 psS32 loop_x = 0; … … 404 404 psF32 ySum = 1.0; 405 405 406 for (loop_x = 0; loop_x < myPoly->nX; loop_x++) {406 for (loop_x = 0; loop_x < poly->nX; loop_x++) { 407 407 ySum = xSum; 408 for (loop_y = 0; loop_y < myPoly->nY; loop_y++) {409 if ( myPoly->mask[loop_x][loop_y] == 0) {410 polySum += ySum * myPoly->coeff[loop_x][loop_y];408 for (loop_y = 0; loop_y < poly->nY; loop_y++) { 409 if (poly->mask[loop_x][loop_y] == 0) { 410 polySum += ySum * poly->coeff[loop_x][loop_y]; 411 411 } 412 412 ySum *= y; … … 418 418 } 419 419 420 static psF32 chebPolynomial2DEval(psF32 x, psF32 y, const psPolynomial2D* myPoly)420 static psF32 chebPolynomial2DEval(psF32 x, psF32 y, const psPolynomial2D* poly) 421 421 { 422 422 PS_ASSERT_FLOAT_WITHIN_RANGE(x, -1.0, 1.0, 0.0); 423 423 PS_ASSERT_FLOAT_WITHIN_RANGE(y, -1.0, 1.0, 0.0); 424 PS_ASSERT_POLY_NON_NULL( myPoly, NAN);424 PS_ASSERT_POLY_NON_NULL(poly, NAN); 425 425 426 426 psS32 loop_x = 0; … … 433 433 // Determine how many Chebyshev polynomials 434 434 // are needed, then create them. 435 maxChebyPoly = myPoly->nX;436 if ( myPoly->nY > maxChebyPoly) {437 maxChebyPoly = myPoly->nY;435 maxChebyPoly = poly->nX; 436 if (poly->nY > maxChebyPoly) { 437 maxChebyPoly = poly->nY; 438 438 } 439 439 chebPolys = createChebyshevPolys(maxChebyPoly); 440 440 441 for (loop_x = 0; loop_x < myPoly->nX; loop_x++) {442 for (loop_y = 0; loop_y < myPoly->nY; loop_y++) {443 if ( myPoly->mask[loop_x][loop_y] == 0) {444 polySum += myPoly->coeff[loop_x][loop_y] *441 for (loop_x = 0; loop_x < poly->nX; loop_x++) { 442 for (loop_y = 0; loop_y < poly->nY; loop_y++) { 443 if (poly->mask[loop_x][loop_y] == 0) { 444 polySum += poly->coeff[loop_x][loop_y] * 445 445 psPolynomial1DEval(chebPolys[loop_x], x) * 446 446 psPolynomial1DEval(chebPolys[loop_y], y); … … 455 455 } 456 456 457 static psF32 ordPolynomial3DEval(psF32 x, psF32 y, psF32 z, const psPolynomial3D* myPoly)457 static psF32 ordPolynomial3DEval(psF32 x, psF32 y, psF32 z, const psPolynomial3D* poly) 458 458 { 459 459 psS32 loop_x = 0; … … 465 465 psF32 zSum = 1.0; 466 466 467 for (loop_x = 0; loop_x < myPoly->nX; loop_x++) {467 for (loop_x = 0; loop_x < poly->nX; loop_x++) { 468 468 ySum = xSum; 469 for (loop_y = 0; loop_y < myPoly->nY; loop_y++) {469 for (loop_y = 0; loop_y < poly->nY; loop_y++) { 470 470 zSum = ySum; 471 for (loop_z = 0; loop_z < myPoly->nZ; loop_z++) {472 if ( myPoly->mask[loop_x][loop_y][loop_z] == 0) {473 polySum += zSum * myPoly->coeff[loop_x][loop_y][loop_z];471 for (loop_z = 0; loop_z < poly->nZ; loop_z++) { 472 if (poly->mask[loop_x][loop_y][loop_z] == 0) { 473 polySum += zSum * poly->coeff[loop_x][loop_y][loop_z]; 474 474 } 475 475 zSum *= z; … … 483 483 } 484 484 485 static psF32 chebPolynomial3DEval(psF32 x, psF32 y, psF32 z, const psPolynomial3D* myPoly)485 static psF32 chebPolynomial3DEval(psF32 x, psF32 y, psF32 z, const psPolynomial3D* poly) 486 486 { 487 487 PS_ASSERT_FLOAT_WITHIN_RANGE(x, -1.0, 1.0, 0.0); … … 498 498 // Determine how many Chebyshev polynomials 499 499 // are needed, then create them. 500 maxChebyPoly = myPoly->nX;501 if ( myPoly->nY > maxChebyPoly) {502 maxChebyPoly = myPoly->nY;503 } 504 if ( myPoly->nZ > maxChebyPoly) {505 maxChebyPoly = myPoly->nZ;500 maxChebyPoly = poly->nX; 501 if (poly->nY > maxChebyPoly) { 502 maxChebyPoly = poly->nY; 503 } 504 if (poly->nZ > maxChebyPoly) { 505 maxChebyPoly = poly->nZ; 506 506 } 507 507 chebPolys = createChebyshevPolys(maxChebyPoly); 508 508 509 for (loop_x = 0; loop_x < myPoly->nX; loop_x++) {510 for (loop_y = 0; loop_y < myPoly->nY; loop_y++) {511 for (loop_z = 0; loop_z < myPoly->nZ; loop_z++) {512 if ( myPoly->mask[loop_x][loop_y][loop_z] == 0) {513 polySum += myPoly->coeff[loop_x][loop_y][loop_z] *509 for (loop_x = 0; loop_x < poly->nX; loop_x++) { 510 for (loop_y = 0; loop_y < poly->nY; loop_y++) { 511 for (loop_z = 0; loop_z < poly->nZ; loop_z++) { 512 if (poly->mask[loop_x][loop_y][loop_z] == 0) { 513 polySum += poly->coeff[loop_x][loop_y][loop_z] * 514 514 psPolynomial1DEval(chebPolys[loop_x], x) * 515 515 psPolynomial1DEval(chebPolys[loop_y], y) * … … 527 527 } 528 528 529 static psF32 ordPolynomial4DEval(psF32 w, psF32 x, psF32 y, psF32 z, const psPolynomial4D* myPoly) 530 { 531 psS32 loop_w = 0; 529 static psF32 ordPolynomial4DEval(psF32 x, psF32 y, psF32 z, psF32 t, const psPolynomial4D* poly) 530 { 532 531 psS32 loop_x = 0; 533 532 psS32 loop_y = 0; 534 533 psS32 loop_z = 0; 534 psS32 loop_t = 0; 535 535 psF32 polySum = 0.0; 536 psF32 wSum = 1.0;537 536 psF32 xSum = 1.0; 538 537 psF32 ySum = 1.0; 539 538 psF32 zSum = 1.0; 540 541 for (loop_w = 0; loop_w < myPoly->nW; loop_w++) { 542 xSum = wSum; 543 for (loop_x = 0; loop_x < myPoly->nX; loop_x++) { 544 ySum = xSum; 545 for (loop_y = 0; loop_y < myPoly->nY; loop_y++) { 546 zSum = ySum; 547 for (loop_z = 0; loop_z < myPoly->nZ; loop_z++) { 548 if (myPoly->mask[loop_w][loop_x][loop_y][loop_z] == 0) { 549 polySum += zSum * myPoly->coeff[loop_w][loop_x][loop_y][loop_z]; 539 psF32 tSum = 1.0; 540 541 for (loop_x = 0; loop_x < poly->nX; loop_x++) { 542 ySum = xSum; 543 for (loop_y = 0; loop_y < poly->nY; loop_y++) { 544 zSum = ySum; 545 for (loop_z = 0; loop_z < poly->nZ; loop_z++) { 546 tSum = zSum; 547 for (loop_t = 0; loop_t < poly->nT; loop_t++) { 548 if (poly->mask[loop_x][loop_y][loop_z][loop_t] == 0) { 549 polySum += tSum * poly->coeff[loop_x][loop_y][loop_z][loop_t]; 550 550 } 551 zSum *= z;551 tSum *= t; 552 552 } 553 ySum *= y;553 zSum *= z; 554 554 } 555 xSum *= x;556 } 557 wSum *= w;555 ySum *= y; 556 } 557 xSum *= x; 558 558 } 559 559 … … 561 561 } 562 562 563 static psF32 chebPolynomial4DEval(psF32 w, psF32 x, psF32 y, psF32 z, const psPolynomial4D* myPoly) 564 { 565 PS_ASSERT_FLOAT_WITHIN_RANGE(w, -1.0, 1.0, 0.0); 563 static psF32 chebPolynomial4DEval(psF32 x, psF32 y, psF32 z, psF32 t, const psPolynomial4D* poly) 564 { 566 565 PS_ASSERT_FLOAT_WITHIN_RANGE(x, -1.0, 1.0, 0.0); 567 566 PS_ASSERT_FLOAT_WITHIN_RANGE(y, -1.0, 1.0, 0.0); 568 567 PS_ASSERT_FLOAT_WITHIN_RANGE(z, -1.0, 1.0, 0.0); 569 psS32 loop_w = 0;568 PS_ASSERT_FLOAT_WITHIN_RANGE(t, -1.0, 1.0, 0.0); 570 569 psS32 loop_x = 0; 571 570 psS32 loop_y = 0; 572 571 psS32 loop_z = 0; 572 psS32 loop_t = 0; 573 573 psS32 i = 0; 574 574 psF32 polySum = 0.0; … … 578 578 // Determine how many Chebyshev polynomials 579 579 // are needed, then create them. 580 maxChebyPoly = myPoly->nW;581 if ( myPoly->nX> maxChebyPoly) {582 maxChebyPoly = myPoly->nX;583 } 584 if ( myPoly->nY> maxChebyPoly) {585 maxChebyPoly = myPoly->nY;586 } 587 if ( myPoly->nZ> maxChebyPoly) {588 maxChebyPoly = myPoly->nZ;580 maxChebyPoly = poly->nX; 581 if (poly->nY > maxChebyPoly) { 582 maxChebyPoly = poly->nY; 583 } 584 if (poly->nZ > maxChebyPoly) { 585 maxChebyPoly = poly->nZ; 586 } 587 if (poly->nT > maxChebyPoly) { 588 maxChebyPoly = poly->nT; 589 589 } 590 590 chebPolys = createChebyshevPolys(maxChebyPoly); 591 591 592 for (loop_w = 0; loop_w < myPoly->nW; loop_w++) { 593 for (loop_x = 0; loop_x < myPoly->nX; loop_x++) { 594 for (loop_y = 0; loop_y < myPoly->nY; loop_y++) { 595 for (loop_z = 0; loop_z < myPoly->nZ; loop_z++) { 596 if (myPoly->mask[loop_w][loop_x][loop_y][loop_z] == 0) { 597 polySum += myPoly->coeff[loop_w][loop_x][loop_y][loop_z] * 598 psPolynomial1DEval(chebPolys[loop_w], w) * 592 for (loop_x = 0; loop_x < poly->nX; loop_x++) { 593 for (loop_y = 0; loop_y < poly->nY; loop_y++) { 594 for (loop_z = 0; loop_z < poly->nZ; loop_z++) { 595 for (loop_t = 0; loop_t < poly->nT; loop_t++) { 596 if (poly->mask[loop_x][loop_y][loop_z][loop_t] == 0) { 597 polySum += poly->coeff[loop_x][loop_y][loop_z][loop_t] * 599 598 psPolynomial1DEval(chebPolys[loop_x], x) * 600 599 psPolynomial1DEval(chebPolys[loop_y], y) * 601 psPolynomial1DEval(chebPolys[loop_z], z); 600 psPolynomial1DEval(chebPolys[loop_z], z) * 601 psPolynomial1DEval(chebPolys[loop_t], t); 602 602 } 603 603 } … … 616 616 Polynomial coefficients will be accessed in [w][x][y][z] fashion. 617 617 *****************************************************************************/ 618 static psF64 dOrdPolynomial1DEval(psF64 x, const psDPolynomial1D* myPoly)618 static psF64 dOrdPolynomial1DEval(psF64 x, const psDPolynomial1D* poly) 619 619 { 620 620 psS32 loop_x = 0; … … 622 622 psF64 xSum = 1.0; 623 623 624 for (loop_x = 0; loop_x < myPoly->n; loop_x++) {625 if ( myPoly->mask[loop_x] == 0) {626 polySum += xSum * myPoly->coeff[loop_x];624 for (loop_x = 0; loop_x < poly->n; loop_x++) { 625 if (poly->mask[loop_x] == 0) { 626 polySum += xSum * poly->coeff[loop_x]; 627 627 } 628 628 xSum *= x; … … 634 634 // XXX: You can do this without having to psAlloc() vector d. 635 635 // XXX: How does the mask vector effect Crenshaw's formula? 636 static psF64 dChebPolynomial1DEval(psF64 x, const psDPolynomial1D* myPoly)636 static psF64 dChebPolynomial1DEval(psF64 x, const psDPolynomial1D* poly) 637 637 { 638 638 PS_ASSERT_FLOAT_WITHIN_RANGE(x, -1.0, 1.0, 0.0); … … 642 642 psF64 tmp; 643 643 644 n = myPoly->n;644 n = poly->n; 645 645 d = psVectorAlloc(n, PS_TYPE_F64); 646 if( myPoly->mask[n-1] == 0) {647 d->data.F64[n-1] = myPoly->coeff[n-1];646 if(poly->mask[n-1] == 0) { 647 d->data.F64[n-1] = poly->coeff[n-1]; 648 648 } else { 649 649 d->data.F64[n-1] = 0.0; 650 650 } 651 651 d->data.F64[n-2] = (2.0 * x * d->data.F64[n-1]); 652 if( myPoly->mask[n-2] == 0) {653 d->data.F64[n-2] += myPoly->coeff[n-2];652 if(poly->mask[n-2] == 0) { 653 d->data.F64[n-2] += poly->coeff[n-2]; 654 654 } 655 655 for (i=n-3;i>=1;i--) { 656 656 d->data.F64[i] = (2.0 * x * d->data.F64[i+1]) - 657 657 (d->data.F64[i+2]); 658 if( myPoly->mask[i] == 0) {659 d->data.F64[i] += myPoly->coeff[i];658 if(poly->mask[i] == 0) { 659 d->data.F64[i] += poly->coeff[i]; 660 660 } 661 661 } … … 663 663 tmp = (x * d->data.F64[1]) - 664 664 (d->data.F64[2]); 665 if( myPoly->mask[0] == 0) {666 tmp += (0.5 * myPoly->coeff[0]);665 if(poly->mask[0] == 0) { 666 tmp += (0.5 * poly->coeff[0]); 667 667 } 668 668 … … 673 673 static psF64 dOrdPolynomial2DEval(psF64 x, 674 674 psF64 y, 675 const psDPolynomial2D* myPoly)675 const psDPolynomial2D* poly) 676 676 { 677 677 psS32 loop_x = 0; … … 681 681 psF64 ySum = 1.0; 682 682 683 for (loop_x = 0; loop_x < myPoly->nX; loop_x++) {683 for (loop_x = 0; loop_x < poly->nX; loop_x++) { 684 684 ySum = xSum; 685 for (loop_y = 0; loop_y < myPoly->nY; loop_y++) {686 if ( myPoly->mask[loop_x][loop_y] == 0) {687 polySum += ySum * myPoly->coeff[loop_x][loop_y];685 for (loop_y = 0; loop_y < poly->nY; loop_y++) { 686 if (poly->mask[loop_x][loop_y] == 0) { 687 polySum += ySum * poly->coeff[loop_x][loop_y]; 688 688 } 689 689 ySum *= y; … … 695 695 } 696 696 697 static psF64 dChebPolynomial2DEval(psF64 x, psF64 y, const psDPolynomial2D* myPoly)697 static psF64 dChebPolynomial2DEval(psF64 x, psF64 y, const psDPolynomial2D* poly) 698 698 { 699 699 PS_ASSERT_FLOAT_WITHIN_RANGE(x, -1.0, 1.0, 0.0); … … 708 708 // Determine how many Chebyshev polynomials 709 709 // are needed, then create them. 710 maxChebyPoly = myPoly->nX;711 if ( myPoly->nY > maxChebyPoly) {712 maxChebyPoly = myPoly->nY;710 maxChebyPoly = poly->nX; 711 if (poly->nY > maxChebyPoly) { 712 maxChebyPoly = poly->nY; 713 713 } 714 714 chebPolys = createChebyshevPolys(maxChebyPoly); 715 715 716 for (loop_x = 0; loop_x < myPoly->nX; loop_x++) {717 for (loop_y = 0; loop_y < myPoly->nY; loop_y++) {718 if ( myPoly->mask[loop_x][loop_y] == 0) {719 polySum += myPoly->coeff[loop_x][loop_y] *716 for (loop_x = 0; loop_x < poly->nX; loop_x++) { 717 for (loop_y = 0; loop_y < poly->nY; loop_y++) { 718 if (poly->mask[loop_x][loop_y] == 0) { 719 polySum += poly->coeff[loop_x][loop_y] * 720 720 psPolynomial1DEval(chebPolys[loop_x], x) * 721 721 psPolynomial1DEval(chebPolys[loop_y], y); … … 731 731 } 732 732 733 static psF64 dOrdPolynomial3DEval(psF64 x, psF64 y, psF64 z, const psDPolynomial3D* myPoly)733 static psF64 dOrdPolynomial3DEval(psF64 x, psF64 y, psF64 z, const psDPolynomial3D* poly) 734 734 { 735 735 psS32 loop_x = 0; … … 741 741 psF64 zSum = 1.0; 742 742 743 for (loop_x = 0; loop_x < myPoly->nX; loop_x++) {743 for (loop_x = 0; loop_x < poly->nX; loop_x++) { 744 744 ySum = xSum; 745 for (loop_y = 0; loop_y < myPoly->nY; loop_y++) {745 for (loop_y = 0; loop_y < poly->nY; loop_y++) { 746 746 zSum = ySum; 747 for (loop_z = 0; loop_z < myPoly->nZ; loop_z++) {748 if ( myPoly->mask[loop_x][loop_y][loop_z] == 0) {749 polySum += zSum * myPoly->coeff[loop_x][loop_y][loop_z];747 for (loop_z = 0; loop_z < poly->nZ; loop_z++) { 748 if (poly->mask[loop_x][loop_y][loop_z] == 0) { 749 polySum += zSum * poly->coeff[loop_x][loop_y][loop_z]; 750 750 } 751 751 zSum *= z; … … 759 759 } 760 760 761 static psF64 dChebPolynomial3DEval(psF64 x, psF64 y, psF64 z, const psDPolynomial3D* myPoly)761 static psF64 dChebPolynomial3DEval(psF64 x, psF64 y, psF64 z, const psDPolynomial3D* poly) 762 762 { 763 763 PS_ASSERT_FLOAT_WITHIN_RANGE(x, -1.0, 1.0, 0.0); … … 774 774 // Determine how many Chebyshev polynomials 775 775 // are needed, then create them. 776 maxChebyPoly = myPoly->nX;777 if ( myPoly->nY > maxChebyPoly) {778 maxChebyPoly = myPoly->nY;779 } 780 if ( myPoly->nZ > maxChebyPoly) {781 maxChebyPoly = myPoly->nZ;776 maxChebyPoly = poly->nX; 777 if (poly->nY > maxChebyPoly) { 778 maxChebyPoly = poly->nY; 779 } 780 if (poly->nZ > maxChebyPoly) { 781 maxChebyPoly = poly->nZ; 782 782 } 783 783 chebPolys = createChebyshevPolys(maxChebyPoly); 784 784 785 for (loop_x = 0; loop_x < myPoly->nX; loop_x++) {786 for (loop_y = 0; loop_y < myPoly->nY; loop_y++) {787 for (loop_z = 0; loop_z < myPoly->nZ; loop_z++) {788 if ( myPoly->mask[loop_x][loop_y][loop_z] == 0) {789 polySum += myPoly->coeff[loop_x][loop_y][loop_z] *785 for (loop_x = 0; loop_x < poly->nX; loop_x++) { 786 for (loop_y = 0; loop_y < poly->nY; loop_y++) { 787 for (loop_z = 0; loop_z < poly->nZ; loop_z++) { 788 if (poly->mask[loop_x][loop_y][loop_z] == 0) { 789 polySum += poly->coeff[loop_x][loop_y][loop_z] * 790 790 psPolynomial1DEval(chebPolys[loop_x], x) * 791 791 psPolynomial1DEval(chebPolys[loop_y], y) * … … 803 803 } 804 804 805 static psF64 dOrdPolynomial4DEval(psF64 w, psF64 x, psF64 y, psF64 z, const psDPolynomial4D* myPoly) 806 { 807 psS32 loop_w = 0; 805 static psF64 dOrdPolynomial4DEval(psF64 x, psF64 y, psF64 z, psF64 t, const psDPolynomial4D* poly) 806 { 808 807 psS32 loop_x = 0; 809 808 psS32 loop_y = 0; 810 809 psS32 loop_z = 0; 810 psS32 loop_t = 0; 811 811 psF64 polySum = 0.0; 812 psF64 wSum = 1.0;813 812 psF64 xSum = 1.0; 814 813 psF64 ySum = 1.0; 815 814 psF64 zSum = 1.0; 816 817 for (loop_w = 0; loop_w < myPoly->nW; loop_w++) { 818 xSum = wSum; 819 for (loop_x = 0; loop_x < myPoly->nX; loop_x++) { 820 ySum = xSum; 821 for (loop_y = 0; loop_y < myPoly->nY; loop_y++) { 822 zSum = ySum; 823 for (loop_z = 0; loop_z < myPoly->nZ; loop_z++) { 824 if (myPoly->mask[loop_w][loop_x][loop_y][loop_z] == 0) { 825 polySum += zSum * myPoly->coeff[loop_w][loop_x][loop_y][loop_z]; 815 psF64 tSum = 1.0; 816 817 for (loop_x = 0; loop_x < poly->nX; loop_x++) { 818 ySum = xSum; 819 for (loop_y = 0; loop_y < poly->nY; loop_y++) { 820 zSum = ySum; 821 for (loop_z = 0; loop_z < poly->nZ; loop_z++) { 822 tSum = zSum; 823 for (loop_t = 0; loop_t < poly->nT; loop_t++) { 824 if (poly->mask[loop_x][loop_y][loop_z][loop_t] == 0) { 825 polySum += tSum * poly->coeff[loop_x][loop_y][loop_z][loop_t]; 826 826 } 827 zSum *= z;827 tSum *= t; 828 828 } 829 ySum *= y;829 zSum *= z; 830 830 } 831 xSum *= x;832 } 833 wSum *= w;831 ySum *= y; 832 } 833 xSum *= x; 834 834 } 835 835 … … 837 837 } 838 838 839 static psF64 dChebPolynomial4DEval(psF64 w, psF64 x, psF64 y, psF64 z, const psDPolynomial4D* myPoly) 840 { 841 PS_ASSERT_FLOAT_WITHIN_RANGE(w, -1.0, 1.0, 0.0); 839 static psF64 dChebPolynomial4DEval(psF64 x, psF64 y, psF64 z, psF64 t, const psDPolynomial4D* poly) 840 { 842 841 PS_ASSERT_FLOAT_WITHIN_RANGE(x, -1.0, 1.0, 0.0); 843 842 PS_ASSERT_FLOAT_WITHIN_RANGE(y, -1.0, 1.0, 0.0); 844 843 PS_ASSERT_FLOAT_WITHIN_RANGE(z, -1.0, 1.0, 0.0); 845 psS32 loop_w = 0;844 PS_ASSERT_FLOAT_WITHIN_RANGE(t, -1.0, 1.0, 0.0); 846 845 psS32 loop_x = 0; 847 846 psS32 loop_y = 0; 848 847 psS32 loop_z = 0; 848 psS32 loop_t = 0; 849 849 psS32 i = 0; 850 850 psF64 polySum = 0.0; … … 854 854 // Determine how many Chebyshev polynomials 855 855 // are needed, then create them. 856 maxChebyPoly = myPoly->nW;857 if ( myPoly->nX> maxChebyPoly) {858 maxChebyPoly = myPoly->nX;859 } 860 if ( myPoly->nY> maxChebyPoly) {861 maxChebyPoly = myPoly->nY;862 } 863 if ( myPoly->nZ> maxChebyPoly) {864 maxChebyPoly = myPoly->nZ;856 maxChebyPoly = poly->nX; 857 if (poly->nY > maxChebyPoly) { 858 maxChebyPoly = poly->nY; 859 } 860 if (poly->nZ > maxChebyPoly) { 861 maxChebyPoly = poly->nZ; 862 } 863 if (poly->nT > maxChebyPoly) { 864 maxChebyPoly = poly->nT; 865 865 } 866 866 chebPolys = createChebyshevPolys(maxChebyPoly); 867 867 868 for (loop_w = 0; loop_w < myPoly->nW; loop_w++) { 869 for (loop_x = 0; loop_x < myPoly->nX; loop_x++) { 870 for (loop_y = 0; loop_y < myPoly->nY; loop_y++) { 871 for (loop_z = 0; loop_z < myPoly->nZ; loop_z++) { 872 if (myPoly->mask[loop_w][loop_x][loop_y][loop_z] == 0) { 873 polySum += myPoly->coeff[loop_w][loop_x][loop_y][loop_z] * 874 psPolynomial1DEval(chebPolys[loop_w], w) * 868 for (loop_x = 0; loop_x < poly->nX; loop_x++) { 869 for (loop_y = 0; loop_y < poly->nY; loop_y++) { 870 for (loop_z = 0; loop_z < poly->nZ; loop_z++) { 871 for (loop_t = 0; loop_t < poly->nT; loop_t++) { 872 if (poly->mask[loop_x][loop_y][loop_z][loop_t] == 0) { 873 polySum += poly->coeff[loop_x][loop_y][loop_z][loop_t] * 875 874 psPolynomial1DEval(chebPolys[loop_x], x) * 876 875 psPolynomial1DEval(chebPolys[loop_y], y) * 877 psPolynomial1DEval(chebPolys[loop_z], z); 876 psPolynomial1DEval(chebPolys[loop_z], z) * 877 psPolynomial1DEval(chebPolys[loop_t], t); 878 878 } 879 879 } … … 1069 1069 This routine must allocate memory for the polynomial structures. 1070 1070 *****************************************************************************/ 1071 psPolynomial1D* psPolynomial1DAlloc( psS32n,1071 psPolynomial1D* psPolynomial1DAlloc(int n, 1072 1072 psPolynomialType type) 1073 1073 { 1074 1074 PS_ASSERT_INT_POSITIVE(n, NULL); 1075 1075 1076 psS32i = 0;1076 int i = 0; 1077 1077 psPolynomial1D* newPoly = NULL; 1078 1078 … … 1094 1094 } 1095 1095 1096 psPolynomial2D* psPolynomial2DAlloc( psS32 nX, psS32nY,1096 psPolynomial2D* psPolynomial2DAlloc(int nX, int nY, 1097 1097 psPolynomialType type) 1098 1098 { … … 1100 1100 PS_ASSERT_INT_POSITIVE(nY, NULL); 1101 1101 1102 psS32x = 0;1103 psS32y = 0;1102 int x = 0; 1103 int y = 0; 1104 1104 psPolynomial2D* newPoly = NULL; 1105 1105 … … 1130 1130 } 1131 1131 1132 psPolynomial3D* psPolynomial3DAlloc( psS32 nX, psS32 nY, psS32nZ,1132 psPolynomial3D* psPolynomial3DAlloc(int nX, int nY, int nZ, 1133 1133 psPolynomialType type) 1134 1134 { … … 1176 1176 } 1177 1177 1178 psPolynomial4D* psPolynomial4DAlloc( psS32 nW, psS32 nX, psS32 nY, psS32 nZ,1178 psPolynomial4D* psPolynomial4DAlloc(int nX, int nY, int nZ, int nT, 1179 1179 psPolynomialType type) 1180 1180 { 1181 PS_ASSERT_INT_POSITIVE(nW, NULL);1182 1181 PS_ASSERT_INT_POSITIVE(nX, NULL); 1183 1182 PS_ASSERT_INT_POSITIVE(nY, NULL); 1184 1183 PS_ASSERT_INT_POSITIVE(nZ, NULL); 1185 1186 psS32 w = 0; 1184 PS_ASSERT_INT_POSITIVE(nT, NULL); 1185 1187 1186 psS32 x = 0; 1188 1187 psS32 y = 0; 1189 1188 psS32 z = 0; 1189 psS32 t = 0; 1190 1190 psPolynomial4D* newPoly = NULL; 1191 1191 … … 1194 1194 1195 1195 newPoly->type = type; 1196 newPoly->nW = nW;1197 1196 newPoly->nX = nX; 1198 1197 newPoly->nY = nY; 1199 1198 newPoly->nZ = nZ; 1200 1201 newPoly->coeff = (psF32 ****)psAlloc(nW * sizeof(psF32 ***)); 1202 newPoly->coeffErr = (psF32 ****)psAlloc(nW * sizeof(psF32 ***)); 1203 newPoly->mask = (psU8 ****)psAlloc(nW * sizeof(psU8 ***)); 1204 for (w = 0; w < nW; w++) { 1205 newPoly->coeff[w] = (psF32 ***)psAlloc(nX * sizeof(psF32 **)); 1206 newPoly->coeffErr[w] = (psF32 ***)psAlloc(nX * sizeof(psF32 **)); 1207 newPoly->mask[w] = (psU8 ***)psAlloc(nX * sizeof(psU8 **)); 1208 for (x = 0; x < nX; x++) { 1209 newPoly->coeff[w][x] = (psF32 **)psAlloc(nY * sizeof(psF32 *)); 1210 newPoly->coeffErr[w][x] = (psF32 **)psAlloc(nY * sizeof(psF32 *)); 1211 newPoly->mask[w][x] = (psU8 **)psAlloc(nY * sizeof(psU8 *)); 1212 for (y = 0; y < nY; y++) { 1213 newPoly->coeff[w][x][y] = (psF32 *)psAlloc(nZ * sizeof(psF32)); 1214 newPoly->coeffErr[w][x][y] = (psF32 *)psAlloc(nZ * sizeof(psF32)); 1215 newPoly->mask[w][x][y] = (psU8 *)psAlloc(nZ * sizeof(psU8)); 1199 newPoly->nT = nT; 1200 1201 newPoly->coeff = (psF32 ****)psAlloc(nX * sizeof(psF32 ***)); 1202 newPoly->coeffErr = (psF32 ****)psAlloc(nX * sizeof(psF32 ***)); 1203 newPoly->mask = (psU8 ****)psAlloc(nX * sizeof(psU8 ***)); 1204 for (x = 0; x < nX; x++) { 1205 newPoly->coeff[x] = (psF32 ***)psAlloc(nY * sizeof(psF32 **)); 1206 newPoly->coeffErr[x] = (psF32 ***)psAlloc(nY * sizeof(psF32 **)); 1207 newPoly->mask[x] = (psU8 ***)psAlloc(nY * sizeof(psU8 **)); 1208 for (y = 0; y < nY; y++) { 1209 newPoly->coeff[x][y] = (psF32 **)psAlloc(nZ * sizeof(psF32 *)); 1210 newPoly->coeffErr[x][y] = (psF32 **)psAlloc(nZ * sizeof(psF32 *)); 1211 newPoly->mask[x][y] = (psU8 **)psAlloc(nZ * sizeof(psU8 *)); 1212 for (z = 0; z < nZ; z++) { 1213 newPoly->coeff[x][y][z] = (psF32 *)psAlloc(nT * sizeof(psF32)); 1214 newPoly->coeffErr[x][y][z] = (psF32 *)psAlloc(nT * sizeof(psF32)); 1215 newPoly->mask[x][y][z] = (psU8 *)psAlloc(nT * sizeof(psU8)); 1216 1216 } 1217 1217 } 1218 1218 } 1219 for ( w = 0; w < nW; w++) {1220 for ( x = 0; x < nX; x++) {1221 for ( y = 0; y < nY; y++) {1222 for ( z = 0; z < nZ; z++) {1223 newPoly->coeff[ w][x][y][z] = 0.0;1224 newPoly->coeffErr[ w][x][y][z] = 0.0;1225 newPoly->mask[ w][x][y][z] = 0;1219 for (x = 0; x < nX; x++) { 1220 for (y = 0; y < nY; y++) { 1221 for (z = 0; z < nZ; z++) { 1222 for (t = 0; t < nT; t++) { 1223 newPoly->coeff[x][y][z][t] = 0.0; 1224 newPoly->coeffErr[x][y][z][t] = 0.0; 1225 newPoly->mask[x][y][z][t] = 0; 1226 1226 } 1227 1227 } … … 1431 1431 1432 1432 1433 psDPolynomial1D* psDPolynomial1DAlloc( psS32n,1433 psDPolynomial1D* psDPolynomial1DAlloc(int n, 1434 1434 psPolynomialType type) 1435 1435 { 1436 1436 PS_ASSERT_INT_POSITIVE(n, NULL); 1437 1437 1438 psS32i = 0;1438 unsigned int i = 0; 1439 1439 psDPolynomial1D* newPoly = NULL; 1440 1440 … … 1456 1456 } 1457 1457 1458 psDPolynomial2D* psDPolynomial2DAlloc( psS32 nX, psS32nY,1458 psDPolynomial2D* psDPolynomial2DAlloc(int nX, int nY, 1459 1459 psPolynomialType type) 1460 1460 { … … 1462 1462 PS_ASSERT_INT_POSITIVE(nY, NULL); 1463 1463 1464 psS32x = 0;1465 psS32y = 0;1464 unsigned int x = 0; 1465 unsigned int y = 0; 1466 1466 psDPolynomial2D* newPoly = NULL; 1467 1467 … … 1492 1492 } 1493 1493 1494 psDPolynomial3D* psDPolynomial3DAlloc( psS32 nX, psS32 nY, psS32nZ,1494 psDPolynomial3D* psDPolynomial3DAlloc(int nX, int nY, int nZ, 1495 1495 psPolynomialType type) 1496 1496 { … … 1499 1499 PS_ASSERT_INT_POSITIVE(nZ, NULL); 1500 1500 1501 psS32x = 0;1502 psS32y = 0;1503 psS32z = 0;1501 unsigned int x = 0; 1502 unsigned int y = 0; 1503 unsigned int z = 0; 1504 1504 psDPolynomial3D* newPoly = NULL; 1505 1505 … … 1538 1538 } 1539 1539 1540 psDPolynomial4D* psDPolynomial4DAlloc( psS32 nW, psS32 nX, psS32 nY, psS32 nZ,1540 psDPolynomial4D* psDPolynomial4DAlloc(int nX, int nY, int nZ, int nT, 1541 1541 psPolynomialType type) 1542 1542 { 1543 PS_ASSERT_INT_POSITIVE(nW, NULL);1544 1543 PS_ASSERT_INT_POSITIVE(nX, NULL); 1545 1544 PS_ASSERT_INT_POSITIVE(nY, NULL); 1546 1545 PS_ASSERT_INT_POSITIVE(nZ, NULL); 1547 1548 psS32 w = 0; 1549 psS32 x = 0; 1550 psS32 y = 0; 1551 psS32 z = 0; 1546 PS_ASSERT_INT_POSITIVE(nT, NULL); 1547 1548 unsigned int x = 0; 1549 unsigned int y = 0; 1550 unsigned int z = 0; 1551 unsigned int t = 0; 1552 1552 psDPolynomial4D* newPoly = NULL; 1553 1553 … … 1556 1556 1557 1557 newPoly->type = type; 1558 newPoly->nW = nW;1559 1558 newPoly->nX = nX; 1560 1559 newPoly->nY = nY; 1561 1560 newPoly->nZ = nZ; 1562 1563 newPoly->coeff = (psF64 ****)psAlloc(nW * sizeof(psF64 ***)); 1564 newPoly->coeffErr = (psF64 ****)psAlloc(nW * sizeof(psF64 ***)); 1565 newPoly->mask = (psU8 ****)psAlloc(nW * sizeof(psU8 ***)); 1566 for (w = 0; w < nW; w++) { 1567 newPoly->coeff[w] = (psF64 ***)psAlloc(nX * sizeof(psF64 **)); 1568 newPoly->coeffErr[w] = (psF64 ***)psAlloc(nX * sizeof(psF64 **)); 1569 newPoly->mask[w] = (psU8 ***)psAlloc(nX * sizeof(psU8 **)); 1570 for (x = 0; x < nX; x++) { 1571 newPoly->coeff[w][x] = (psF64 **)psAlloc(nY * sizeof(psF64 *)); 1572 newPoly->coeffErr[w][x] = (psF64 **)psAlloc(nY * sizeof(psF64 *)); 1573 newPoly->mask[w][x] = (psU8 **)psAlloc(nY * sizeof(psU8 *)); 1574 for (y = 0; y < nY; y++) { 1575 newPoly->coeff[w][x][y] = (psF64 *)psAlloc(nZ * sizeof(psF64)); 1576 newPoly->coeffErr[w][x][y] = (psF64 *)psAlloc(nZ * sizeof(psF64)); 1577 newPoly->mask[w][x][y] = (psU8 *)psAlloc(nZ * sizeof(psU8)); 1561 newPoly->nT = nT; 1562 1563 newPoly->coeff = (psF64 ****)psAlloc(nX * sizeof(psF64 ***)); 1564 newPoly->coeffErr = (psF64 ****)psAlloc(nX * sizeof(psF64 ***)); 1565 newPoly->mask = (psU8 ****)psAlloc(nX * sizeof(psU8 ***)); 1566 for (x = 0; x < nX; x++) { 1567 newPoly->coeff[x] = (psF64 ***)psAlloc(nY * sizeof(psF64 **)); 1568 newPoly->coeffErr[x] = (psF64 ***)psAlloc(nY * sizeof(psF64 **)); 1569 newPoly->mask[x] = (psU8 ***)psAlloc(nY * sizeof(psU8 **)); 1570 for (y = 0; y < nY; y++) { 1571 newPoly->coeff[x][y] = (psF64 **)psAlloc(nZ * sizeof(psF64 *)); 1572 newPoly->coeffErr[x][y] = (psF64 **)psAlloc(nZ * sizeof(psF64 *)); 1573 newPoly->mask[x][y] = (psU8 **)psAlloc(nZ * sizeof(psU8 *)); 1574 for (z = 0; z < nZ; z++) { 1575 newPoly->coeff[x][y][z] = (psF64 *)psAlloc(nT * sizeof(psF64)); 1576 newPoly->coeffErr[x][y][z] = (psF64 *)psAlloc(nT * sizeof(psF64)); 1577 newPoly->mask[x][y][z] = (psU8 *)psAlloc(nT * sizeof(psU8)); 1578 1578 } 1579 1579 } 1580 1580 } 1581 for ( w = 0; w < nW; w++) {1582 for ( x = 0; x < nX; x++) {1583 for ( y = 0; y < nY; y++) {1584 for ( z = 0; z < nZ; z++) {1585 newPoly->coeff[ w][x][y][z] = 0.0;1586 newPoly->coeffErr[ w][x][y][z] = 0.0;1587 newPoly->mask[ w][x][y][z] = 0;1581 for (x = 0; x < nX; x++) { 1582 for (y = 0; y < nY; y++) { 1583 for (z = 0; z < nZ; z++) { 1584 for (t = 0; t < nT; t++) { 1585 newPoly->coeff[x][y][z][t] = 0.0; 1586 newPoly->coeffErr[x][y][z][t] = 0.0; 1587 newPoly->mask[x][y][z][t] = 0; 1588 1588 } 1589 1589 } … … 1595 1595 1596 1596 1597 psF64 psDPolynomial1DEval(const psDPolynomial1D* myPoly, psF64 x)1598 { 1599 PS_ASSERT_POLY_NON_NULL( myPoly, NAN);1600 1601 if ( myPoly->type == PS_POLYNOMIAL_ORD) {1602 return(dOrdPolynomial1DEval(x, myPoly));1603 } else if ( myPoly->type == PS_POLYNOMIAL_CHEB) {1604 return(dChebPolynomial1DEval(x, myPoly));1597 psF64 psDPolynomial1DEval(const psDPolynomial1D* poly, psF64 x) 1598 { 1599 PS_ASSERT_POLY_NON_NULL(poly, NAN); 1600 1601 if (poly->type == PS_POLYNOMIAL_ORD) { 1602 return(dOrdPolynomial1DEval(x, poly)); 1603 } else if (poly->type == PS_POLYNOMIAL_CHEB) { 1604 return(dChebPolynomial1DEval(x, poly)); 1605 1605 } else { 1606 1606 psError(PS_ERR_BAD_PARAMETER_TYPE, true, 1607 1607 PS_ERRORTEXT_psFunctions_INVALID_POLYNOMIAL_TYPE, 1608 myPoly->type);1608 poly->type); 1609 1609 } 1610 1610 return(NAN); 1611 1611 } 1612 1612 1613 psVector *psDPolynomial1DEvalVector(const psDPolynomial1D * myPoly,1613 psVector *psDPolynomial1DEvalVector(const psDPolynomial1D *poly, 1614 1614 const psVector *x) 1615 1615 1616 1616 { 1617 PS_ASSERT_POLY_NON_NULL( myPoly, NULL);1617 PS_ASSERT_POLY_NON_NULL(poly, NULL); 1618 1618 PS_ASSERT_VECTOR_NON_NULL(x, NULL); 1619 1619 PS_ASSERT_VECTOR_TYPE(x, PS_TYPE_F64, NULL); … … 1623 1623 tmp = psVectorAlloc(x->n, PS_TYPE_F64); 1624 1624 for (psS32 i=0;i<x->n;i++) { 1625 tmp->data.F64[i] = psDPolynomial1DEval( myPoly,1625 tmp->data.F64[i] = psDPolynomial1DEval(poly, 1626 1626 x->data.F64[i]); 1627 1627 } … … 1631 1631 1632 1632 1633 psF64 psDPolynomial2DEval(const psDPolynomial2D* myPoly,1633 psF64 psDPolynomial2DEval(const psDPolynomial2D* poly, 1634 1634 psF64 x, 1635 1635 psF64 y) 1636 1636 { 1637 PS_ASSERT_POLY_NON_NULL( myPoly, NAN);1638 if ( myPoly->type == PS_POLYNOMIAL_ORD) {1639 return(dOrdPolynomial2DEval(x, y, myPoly));1640 } else if ( myPoly->type == PS_POLYNOMIAL_CHEB) {1641 return(dChebPolynomial2DEval(x, y, myPoly));1637 PS_ASSERT_POLY_NON_NULL(poly, NAN); 1638 if (poly->type == PS_POLYNOMIAL_ORD) { 1639 return(dOrdPolynomial2DEval(x, y, poly)); 1640 } else if (poly->type == PS_POLYNOMIAL_CHEB) { 1641 return(dChebPolynomial2DEval(x, y, poly)); 1642 1642 } else { 1643 1643 psError(PS_ERR_BAD_PARAMETER_TYPE, true, 1644 1644 PS_ERRORTEXT_psFunctions_INVALID_POLYNOMIAL_TYPE, 1645 myPoly->type);1645 poly->type); 1646 1646 } 1647 1647 return(NAN); 1648 1648 } 1649 1649 1650 psVector *psDPolynomial2DEvalVector(const psDPolynomial2D * myPoly,1650 psVector *psDPolynomial2DEvalVector(const psDPolynomial2D *poly, 1651 1651 const psVector *x, 1652 1652 const psVector *y) 1653 1653 { 1654 PS_ASSERT_POLY_NON_NULL( myPoly, NULL);1654 PS_ASSERT_POLY_NON_NULL(poly, NULL); 1655 1655 PS_ASSERT_VECTOR_NON_NULL(x, NULL); 1656 1656 PS_ASSERT_VECTOR_TYPE(x, PS_TYPE_F64, NULL); … … 1671 1671 // Evaluate the polynomial 1672 1672 for (psS32 i = 0; i < vecLen; i++) { 1673 tmp->data.F64[i] = psDPolynomial2DEval( myPoly,x->data.F64[i],y->data.F64[i]);1673 tmp->data.F64[i] = psDPolynomial2DEval(poly,x->data.F64[i],y->data.F64[i]); 1674 1674 } 1675 1675 … … 1679 1679 1680 1680 1681 psF64 psDPolynomial3DEval(const psDPolynomial3D* myPoly,1681 psF64 psDPolynomial3DEval(const psDPolynomial3D* poly, 1682 1682 psF64 x, 1683 1683 psF64 y, 1684 1684 psF64 z) 1685 1685 { 1686 PS_ASSERT_POLY_NON_NULL( myPoly, NAN);1687 1688 if ( myPoly->type == PS_POLYNOMIAL_ORD) {1689 return(dOrdPolynomial3DEval(x, y, z, myPoly));1690 } else if ( myPoly->type == PS_POLYNOMIAL_CHEB) {1691 return(dChebPolynomial3DEval(x, y, z, myPoly));1686 PS_ASSERT_POLY_NON_NULL(poly, NAN); 1687 1688 if (poly->type == PS_POLYNOMIAL_ORD) { 1689 return(dOrdPolynomial3DEval(x, y, z, poly)); 1690 } else if (poly->type == PS_POLYNOMIAL_CHEB) { 1691 return(dChebPolynomial3DEval(x, y, z, poly)); 1692 1692 } else { 1693 1693 psError(PS_ERR_BAD_PARAMETER_TYPE, true, 1694 1694 PS_ERRORTEXT_psFunctions_INVALID_POLYNOMIAL_TYPE, 1695 myPoly->type);1695 poly->type); 1696 1696 } 1697 1697 return(NAN); 1698 1698 } 1699 1699 1700 psVector *psDPolynomial3DEvalVector(const psDPolynomial3D * myPoly,1700 psVector *psDPolynomial3DEvalVector(const psDPolynomial3D *poly, 1701 1701 const psVector *x, 1702 1702 const psVector *y, … … 1704 1704 1705 1705 { 1706 PS_ASSERT_POLY_NON_NULL( myPoly, NULL);1706 PS_ASSERT_POLY_NON_NULL(poly, NULL); 1707 1707 PS_ASSERT_VECTOR_NON_NULL(x, NULL); 1708 1708 PS_ASSERT_VECTOR_TYPE(x, PS_TYPE_F64, NULL); … … 1728 1728 // Evaluate polynomial 1729 1729 for (psS32 i = 0; i < vecLen; i++) { 1730 tmp->data.F64[i] = psDPolynomial3DEval( myPoly,1730 tmp->data.F64[i] = psDPolynomial3DEval(poly, 1731 1731 x->data.F64[i], 1732 1732 y->data.F64[i], … … 1738 1738 } 1739 1739 1740 psF64 psDPolynomial4DEval(const psDPolynomial4D* myPoly, 1741 psF64 w, 1740 psF64 psDPolynomial4DEval(const psDPolynomial4D* poly, 1742 1741 psF64 x, 1743 1742 psF64 y, 1744 psF64 z) 1745 { 1746 PS_ASSERT_POLY_NON_NULL(myPoly, NAN); 1747 1748 if (myPoly->type == PS_POLYNOMIAL_ORD) { 1749 return(dOrdPolynomial4DEval(w,x,y,z, myPoly)); 1750 } else if (myPoly->type == PS_POLYNOMIAL_CHEB) { 1751 return(dChebPolynomial4DEval(w,x,y,z, myPoly)); 1743 psF64 z, 1744 psF64 t) 1745 { 1746 PS_ASSERT_POLY_NON_NULL(poly, NAN); 1747 1748 if (poly->type == PS_POLYNOMIAL_ORD) { 1749 return(dOrdPolynomial4DEval(x,y,z,t, poly)); 1750 } else if (poly->type == PS_POLYNOMIAL_CHEB) { 1751 return(dChebPolynomial4DEval(x,y,z,t, poly)); 1752 1752 } else { 1753 1753 psError(PS_ERR_BAD_PARAMETER_TYPE, true, 1754 1754 PS_ERRORTEXT_psFunctions_INVALID_POLYNOMIAL_TYPE, 1755 myPoly->type);1755 poly->type); 1756 1756 } 1757 1757 return(NAN); 1758 1758 } 1759 1759 1760 psVector *psDPolynomial4DEvalVector(const psDPolynomial4D *myPoly, 1761 const psVector *w, 1760 psVector *psDPolynomial4DEvalVector(const psDPolynomial4D *poly, 1762 1761 const psVector *x, 1763 1762 const psVector *y, 1764 const psVector *z) 1765 { 1766 PS_ASSERT_POLY_NON_NULL(myPoly, NULL); 1767 PS_ASSERT_VECTOR_NON_NULL(w, NULL); 1768 PS_ASSERT_VECTOR_TYPE(w, PS_TYPE_F64, NULL); 1763 const psVector *z, 1764 const psVector *t) 1765 { 1766 PS_ASSERT_POLY_NON_NULL(poly, NULL); 1769 1767 PS_ASSERT_VECTOR_NON_NULL(x, NULL); 1770 1768 PS_ASSERT_VECTOR_TYPE(x, PS_TYPE_F64, NULL); … … 1773 1771 PS_ASSERT_VECTOR_NON_NULL(z, NULL); 1774 1772 PS_ASSERT_VECTOR_TYPE(z, PS_TYPE_F64, NULL); 1773 PS_ASSERT_VECTOR_NON_NULL(t, NULL); 1774 PS_ASSERT_VECTOR_TYPE(t, PS_TYPE_F64, NULL); 1775 1775 1776 1776 psVector *tmp; 1777 psS32 vecLen= w->n;1777 psS32 vecLen=x->n; 1778 1778 1779 1779 // Determine the output vector size from min of input vectors 1780 if (z->n < vecLen) { 1781 vecLen = z->n; 1782 } 1780 1783 if (y->n < vecLen) { 1781 1784 vecLen = y->n; 1782 1785 } 1783 if (x->n < vecLen) { 1784 vecLen = x->n; 1785 } 1786 if (z->n < vecLen) { 1787 vecLen = z->n; 1786 if (t->n < vecLen) { 1787 vecLen = t->n; 1788 1788 } 1789 1789 … … 1793 1793 // Evaluate the polynomial 1794 1794 for (psS32 i = 0; i < vecLen; i++) { 1795 tmp->data.F64[i] = psDPolynomial4DEval(myPoly, 1796 w->data.F64[i], 1795 tmp->data.F64[i] = psDPolynomial4DEval(poly, 1797 1796 x->data.F64[i], 1798 1797 y->data.F64[i], 1799 z->data.F64[i]); 1798 z->data.F64[i], 1799 t->data.F64[i]); 1800 1800 } 1801 1801 -
trunk/psLib/src/math/psPolynomial.h
r4405 r4422 12 12 * @author GLG, MHPCC 13 13 * 14 * @version $Revision: 1. 49$ $Name: not supported by cvs2svn $15 * @date $Date: 2005-06-2 8 00:53:53$14 * @version $Revision: 1.50 $ $Name: not supported by cvs2svn $ 15 * @date $Date: 2005-06-29 00:43:46 $ 16 16 * 17 17 * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii … … 74 74 { 75 75 psPolynomialType type; ///< Polynomial type 76 psS32 n;///< Number of terms76 unsigned int n; ///< Number of terms 77 77 psF32 *coeff; ///< Coefficients 78 78 psF32 *coeffErr; ///< Error in coefficients … … 85 85 { 86 86 psPolynomialType type; ///< Polynomial type 87 psS32 nX;///< Number of terms in x88 psS32 nY;///< Number of terms in y87 unsigned int nX; ///< Number of terms in x 88 unsigned int nY; ///< Number of terms in y 89 89 psF32 **coeff; ///< Coefficients 90 90 psF32 **coeffErr; ///< Error in coefficients … … 97 97 { 98 98 psPolynomialType type; ///< Polynomial type 99 psS32 nX;///< Number of terms in x100 psS32 nY;///< Number of terms in y101 psS32 nZ;///< Number of terms in z99 unsigned int nX; ///< Number of terms in x 100 unsigned int nY; ///< Number of terms in y 101 unsigned int nZ; ///< Number of terms in z 102 102 psF32 ***coeff; ///< Coefficients 103 103 psF32 ***coeffErr; ///< Error in coefficients … … 110 110 { 111 111 psPolynomialType type; ///< Polynomial type 112 psS32 nW; ///< Number of terms in w113 psS32 nX; ///< Number of terms in x114 psS32 nY; ///< Number of terms in y115 psS32 nZ; ///< Number of terms in z112 unsigned int nX; ///< Number of terms in x 113 unsigned int nY; ///< Number of terms in y 114 unsigned int nZ; ///< Number of terms in z 115 unsigned int nT; ///< Number of terms in t 116 116 psF32 ****coeff; ///< Coefficients 117 117 psF32 ****coeffErr; ///< Error in coefficients … … 126 126 */ 127 127 psPolynomial1D* psPolynomial1DAlloc( 128 psS32 n,///< Number of terms128 int n, ///< Number of terms 129 129 psPolynomialType type ///< Polynomial Type 130 130 ); … … 135 135 */ 136 136 psPolynomial2D* psPolynomial2DAlloc( 137 psS32 nX,///< Number of terms in x138 psS32 nY,///< Number of terms in y137 int nX, ///< Number of terms in x 138 int nY, ///< Number of terms in y 139 139 psPolynomialType type ///< Polynomial Type 140 140 ); … … 145 145 */ 146 146 psPolynomial3D* psPolynomial3DAlloc( 147 psS32 nX,///< Number of terms in x148 psS32 nY,///< Number of terms in y149 psS32 nZ,///< Number of terms in z147 int nX, ///< Number of terms in x 148 int nY, ///< Number of terms in y 149 int nZ, ///< Number of terms in z 150 150 psPolynomialType type ///< Polynomial Type 151 151 ); … … 156 156 */ 157 157 psPolynomial4D* psPolynomial4DAlloc( 158 psS32 nW, ///< Number of terms in w159 psS32 nX, ///< Number of terms in x160 psS32 nY, ///< Number of terms in y161 psS32 nZ, ///< Number of terms in z158 int nX, ///< Number of terms in x 159 int nY, ///< Number of terms in y 160 int nZ, ///< Number of terms in z 161 int nT, ///< Number of terms in t 162 162 psPolynomialType type ///< Polynomial Type 163 163 ); … … 177 177 */ 178 178 psF64 psPolynomial2DEval( 179 const psPolynomial2D* poly, ///< Coefficients for the polynomial180 psF64 x, ///< x location at which to evaluate181 psF64 y ///< y location at which to evaluate179 const psPolynomial2D* poly, ///< Coefficients for the polynomial 180 psF64 x, ///< x location at which to evaluate 181 psF64 y ///< y location at which to evaluate 182 182 ); 183 183 … … 255 255 { 256 256 psPolynomialType type; ///< Polynomial type 257 psS32n; ///< Number of terms257 unsigned int n; ///< Number of terms 258 258 psF64 *coeff; ///< Coefficients 259 259 psF64 *coeffErr; ///< Error in coefficients … … 266 266 { 267 267 psPolynomialType type; ///< Polynomial type 268 psS32nX; ///< Number of terms in x269 psS32nY; ///< Number of terms in y268 unsigned int nX; ///< Number of terms in x 269 unsigned int nY; ///< Number of terms in y 270 270 psF64 **coeff; ///< Coefficients 271 271 psF64 **coeffErr; ///< Error in coefficients … … 278 278 { 279 279 psPolynomialType type; ///< Polynomial type 280 psS32nX; ///< Number of terms in x281 psS32nY; ///< Number of terms in y282 psS32nZ; ///< Number of terms in z280 unsigned int nX; ///< Number of terms in x 281 unsigned int nY; ///< Number of terms in y 282 unsigned int nZ; ///< Number of terms in z 283 283 psF64 ***coeff; ///< Coefficients 284 284 psF64 ***coeffErr; ///< Error in coefficients … … 291 291 { 292 292 psPolynomialType type; ///< Polynomial type 293 psS32 nW; ///< Number of terms in w294 psS32 nX; ///< Number of terms in x295 psS32 nY; ///< Number of terms in y296 psS32 nZ; ///< Number of terms in z293 unsigned int nX; ///< Number of terms in w 294 unsigned int nY; ///< Number of terms in x 295 unsigned int nZ; ///< Number of terms in y 296 unsigned int nT; ///< Number of terms in z 297 297 psF64 ****coeff; ///< Coefficients 298 298 psF64 ****coeffErr; ///< Error in coefficients … … 306 306 */ 307 307 psDPolynomial1D* psDPolynomial1DAlloc( 308 psS32n, ///< Number of terms308 int n, ///< Number of terms 309 309 psPolynomialType type ///< Polynomial Type 310 310 ); … … 315 315 */ 316 316 psDPolynomial2D* psDPolynomial2DAlloc( 317 psS32nX, ///< Number of terms in x318 psS32nY, ///< Number of terms in y317 int nX, ///< Number of terms in x 318 int nY, ///< Number of terms in y 319 319 psPolynomialType type ///< Polynomial Type 320 320 ); … … 325 325 */ 326 326 psDPolynomial3D* psDPolynomial3DAlloc( 327 psS32nX, ///< Number of terms in x328 psS32nY, ///< Number of terms in y329 psS32nZ, ///< Number of terms in z327 int nX, ///< Number of terms in x 328 int nY, ///< Number of terms in y 329 int nZ, ///< Number of terms in z 330 330 psPolynomialType type ///< Polynomial Type 331 331 ); … … 336 336 */ 337 337 psDPolynomial4D* psDPolynomial4DAlloc( 338 psS32 nW, ///< Number of terms in w339 psS32 nX, ///< Number of terms in x340 psS32 nY, ///< Number of terms in y341 psS32 nZ, ///< Number of terms in z338 int nX, ///< Number of terms in w 339 int nY, ///< Number of terms in x 340 int nZ, ///< Number of terms in y 341 int nT, ///< Number of terms in z 342 342 psPolynomialType type ///< Polynomial Type 343 343 ); … … 348 348 */ 349 349 psF64 psDPolynomial1DEval( 350 const psDPolynomial1D* myPoly, ///< Coefficients for the polynomial350 const psDPolynomial1D* poly, ///< Coefficients for the polynomial 351 351 psF64 x ///< Value at which to evaluate 352 352 ); … … 357 357 */ 358 358 psF64 psDPolynomial2DEval( 359 const psDPolynomial2D* myPoly, ///< Coefficients for the polynomial359 const psDPolynomial2D* poly, ///< Coefficients for the polynomial 360 360 psF64 x, ///< Value x at which to evaluate 361 361 psF64 y ///< Value y at which to evaluate … … 367 367 */ 368 368 psF64 psDPolynomial3DEval( 369 const psDPolynomial3D* myPoly, ///< Coefficients for the polynomial369 const psDPolynomial3D* poly, ///< Coefficients for the polynomial 370 370 psF64 x, ///< Value x at which to evaluate 371 371 psF64 y, ///< Value y at which to evaluate … … 378 378 */ 379 379 psF64 psDPolynomial4DEval( 380 const psDPolynomial4D* myPoly, ///< Coefficients for the polynomial381 psF64 w, ///< Value w at which to evaluate382 psF64 x, ///< Value x at which to evaluate383 psF64 y, ///< Value y at which to evaluate384 psF64 z///< Value z at which to evaluate380 const psDPolynomial4D* poly, ///< Coefficients for the polynomial 381 psF64 x, ///< Value w at which to evaluate 382 psF64 y, ///< Value x at which to evaluate 383 psF64 z, ///< Value y at which to evaluate 384 psF64 t ///< Value z at which to evaluate 385 385 ); 386 386 … … 390 390 */ 391 391 psVector *psDPolynomial1DEvalVector( 392 const psDPolynomial1D * myPoly, ///< Coefficients for the polynomial392 const psDPolynomial1D *poly, ///< Coefficients for the polynomial 393 393 const psVector *x ///< x locations at which to evaluate 394 394 ); … … 399 399 */ 400 400 psVector *psDPolynomial2DEvalVector( 401 const psDPolynomial2D * myPoly, ///< Coefficients for the polynomial401 const psDPolynomial2D *poly, ///< Coefficients for the polynomial 402 402 const psVector *x, ///< x locations at which to evaluate 403 403 const psVector *y ///< y locations at which to evaluate … … 409 409 */ 410 410 psVector *psDPolynomial3DEvalVector( 411 const psDPolynomial3D * myPoly, ///< Coefficients for the polynomial411 const psDPolynomial3D *poly, ///< Coefficients for the polynomial 412 412 const psVector *x, ///< x locations at which to evaluate 413 413 const psVector *y, ///< y locations at which to evaluate … … 420 420 */ 421 421 psVector *psDPolynomial4DEvalVector( 422 const psDPolynomial4D * myPoly, ///< Coefficients for the polynomial423 const psVector * w, ///< w locations at which to evaluate424 const psVector * x, ///< x locations at which to evaluate425 const psVector * y, ///< y locations at which to evaluate426 const psVector * z///< z locations at which to evaluate422 const psDPolynomial4D *poly, ///< Coefficients for the polynomial 423 const psVector *x, ///< w locations at which to evaluate 424 const psVector *y, ///< x locations at which to evaluate 425 const psVector *z, ///< y locations at which to evaluate 426 const psVector *t ///< z locations at which to evaluate 427 427 ); 428 428 -
trunk/psLib/src/math/psSpline.c
r4405 r4422 7 7 * polynomials. It also contains a Gaussian functions. 8 8 * 9 * @version $Revision: 1.11 2$ $Name: not supported by cvs2svn $10 * @date $Date: 2005-06-2 8 00:53:53$9 * @version $Revision: 1.113 $ $Name: not supported by cvs2svn $ 10 * @date $Date: 2005-06-29 00:43:46 $ 11 11 * 12 12 * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii … … 46 46 /* TYPE DEFINITIONS */ 47 47 /*****************************************************************************/ 48 static void polynomial1DFree(psPolynomial1D* myPoly);49 static void polynomial2DFree(psPolynomial2D* myPoly);50 static void polynomial3DFree(psPolynomial3D* myPoly);51 static void polynomial4DFree(psPolynomial4D* myPoly);52 static void dPolynomial1DFree(psDPolynomial1D* myPoly);53 static void dPolynomial2DFree(psDPolynomial2D* myPoly);54 static void dPolynomial3DFree(psDPolynomial3D* myPoly);55 static void dPolynomial4DFree(psDPolynomial4D* myPoly);48 static void polynomial1DFree(psPolynomial1D* poly); 49 static void polynomial2DFree(psPolynomial2D* poly); 50 static void polynomial3DFree(psPolynomial3D* poly); 51 static void polynomial4DFree(psPolynomial4D* poly); 52 static void dPolynomial1DFree(psDPolynomial1D* poly); 53 static void dPolynomial2DFree(psDPolynomial2D* poly); 54 static void dPolynomial3DFree(psDPolynomial3D* poly); 55 static void dPolynomial4DFree(psDPolynomial4D* poly); 56 56 static void spline1DFree(psSpline1D *tmpSpline); 57 57 static psS32 vectorBinDisectF32(psF32 *bins,psS32 numBins,psF32 x); … … 97 97 } 98 98 99 static void polynomial1DFree(psPolynomial1D* myPoly)100 { 101 psFree( myPoly->coeff);102 psFree( myPoly->coeffErr);103 psFree( myPoly->mask);104 } 105 106 static void polynomial2DFree(psPolynomial2D* myPoly)107 { 108 psS32x = 0;109 110 for (x = 0; x < myPoly->nX; x++) {111 psFree( myPoly->coeff[x]);112 psFree( myPoly->coeffErr[x]);113 psFree( myPoly->mask[x]);114 } 115 psFree( myPoly->coeff);116 psFree( myPoly->coeffErr);117 psFree( myPoly->mask);118 } 119 120 static void polynomial3DFree(psPolynomial3D* myPoly)121 { 122 psS32x = 0;123 psS32y = 0;124 125 for (x = 0; x < myPoly->nX; x++) {126 for (y = 0; y < myPoly->nY; y++) {127 psFree( myPoly->coeff[x][y]);128 psFree( myPoly->coeffErr[x][y]);129 psFree( myPoly->mask[x][y]);130 } 131 psFree( myPoly->coeff[x]);132 psFree( myPoly->coeffErr[x]);133 psFree( myPoly->mask[x]);134 } 135 136 psFree( myPoly->coeff);137 psFree( myPoly->coeffErr);138 psFree( myPoly->mask);139 } 140 141 static void polynomial4DFree(psPolynomial4D* myPoly)142 { 143 psS32 w= 0;144 psS32 x= 0;145 psS32 y= 0;146 147 for ( w = 0; w < myPoly->nW; w++) {148 for ( x = 0; x < myPoly->nX; x++) {149 for ( y = 0; y < myPoly->nY; y++) {150 psFree( myPoly->coeff[w][x][y]);151 psFree( myPoly->coeffErr[w][x][y]);152 psFree( myPoly->mask[w][x][y]);99 static void polynomial1DFree(psPolynomial1D* poly) 100 { 101 psFree(poly->coeff); 102 psFree(poly->coeffErr); 103 psFree(poly->mask); 104 } 105 106 static void polynomial2DFree(psPolynomial2D* poly) 107 { 108 unsigned int x = 0; 109 110 for (x = 0; x < poly->nX; x++) { 111 psFree(poly->coeff[x]); 112 psFree(poly->coeffErr[x]); 113 psFree(poly->mask[x]); 114 } 115 psFree(poly->coeff); 116 psFree(poly->coeffErr); 117 psFree(poly->mask); 118 } 119 120 static void polynomial3DFree(psPolynomial3D* poly) 121 { 122 unsigned int x = 0; 123 unsigned int y = 0; 124 125 for (x = 0; x < poly->nX; x++) { 126 for (y = 0; y < poly->nY; y++) { 127 psFree(poly->coeff[x][y]); 128 psFree(poly->coeffErr[x][y]); 129 psFree(poly->mask[x][y]); 130 } 131 psFree(poly->coeff[x]); 132 psFree(poly->coeffErr[x]); 133 psFree(poly->mask[x]); 134 } 135 136 psFree(poly->coeff); 137 psFree(poly->coeffErr); 138 psFree(poly->mask); 139 } 140 141 static void polynomial4DFree(psPolynomial4D* poly) 142 { 143 unsigned int x = 0; 144 unsigned int y = 0; 145 unsigned int z = 0; 146 147 for (x = 0; x < poly->nX; x++) { 148 for (y = 0; y < poly->nY; y++) { 149 for (z = 0; z < poly->nZ; z++) { 150 psFree(poly->coeff[x][y][z]); 151 psFree(poly->coeffErr[x][y][z]); 152 psFree(poly->mask[x][y][z]); 153 153 } 154 psFree( myPoly->coeff[w][x]);155 psFree( myPoly->coeffErr[w][x]);156 psFree( myPoly->mask[w][x]);157 } 158 psFree( myPoly->coeff[w]);159 psFree( myPoly->coeffErr[w]);160 psFree( myPoly->mask[w]);161 } 162 163 psFree( myPoly->coeff);164 psFree( myPoly->coeffErr);165 psFree( myPoly->mask);166 } 167 168 static void dPolynomial1DFree(psDPolynomial1D* myPoly)169 { 170 psFree( myPoly->coeff);171 psFree( myPoly->coeffErr);172 psFree( myPoly->mask);173 } 174 175 static void dPolynomial2DFree(psDPolynomial2D* myPoly)176 { 177 for ( psS32 x = 0; x < myPoly->nX; x++) {178 psFree( myPoly->coeff[x]);179 psFree( myPoly->coeffErr[x]);180 psFree( myPoly->mask[x]);181 } 182 psFree( myPoly->coeff);183 psFree( myPoly->coeffErr);184 psFree( myPoly->mask);185 } 186 187 static void dPolynomial3DFree(psDPolynomial3D* myPoly)188 { 189 psS32x = 0;190 psS32y = 0;191 192 for (x = 0; x < myPoly->nX; x++) {193 for (y = 0; y < myPoly->nY; y++) {194 psFree( myPoly->coeff[x][y]);195 psFree( myPoly->coeffErr[x][y]);196 psFree( myPoly->mask[x][y]);197 } 198 psFree( myPoly->coeff[x]);199 psFree( myPoly->coeffErr[x]);200 psFree( myPoly->mask[x]);201 } 202 203 psFree( myPoly->coeff);204 psFree( myPoly->coeffErr);205 psFree( myPoly->mask);206 } 207 208 static void dPolynomial4DFree(psDPolynomial4D* myPoly)209 { 210 psS32 w= 0;211 psS32 x= 0;212 psS32 y= 0;213 214 for ( w = 0; w < myPoly->nW; w++) {215 for ( x = 0; x < myPoly->nX; x++) {216 for ( y = 0; y < myPoly->nY; y++) {217 psFree( myPoly->coeff[w][x][y]);218 psFree( myPoly->coeffErr[w][x][y]);219 psFree( myPoly->mask[w][x][y]);154 psFree(poly->coeff[x][y]); 155 psFree(poly->coeffErr[x][y]); 156 psFree(poly->mask[x][y]); 157 } 158 psFree(poly->coeff[x]); 159 psFree(poly->coeffErr[x]); 160 psFree(poly->mask[x]); 161 } 162 163 psFree(poly->coeff); 164 psFree(poly->coeffErr); 165 psFree(poly->mask); 166 } 167 168 static void dPolynomial1DFree(psDPolynomial1D* poly) 169 { 170 psFree(poly->coeff); 171 psFree(poly->coeffErr); 172 psFree(poly->mask); 173 } 174 175 static void dPolynomial2DFree(psDPolynomial2D* poly) 176 { 177 for (unsigned int x = 0; x < poly->nX; x++) { 178 psFree(poly->coeff[x]); 179 psFree(poly->coeffErr[x]); 180 psFree(poly->mask[x]); 181 } 182 psFree(poly->coeff); 183 psFree(poly->coeffErr); 184 psFree(poly->mask); 185 } 186 187 static void dPolynomial3DFree(psDPolynomial3D* poly) 188 { 189 unsigned int x = 0; 190 unsigned int y = 0; 191 192 for (x = 0; x < poly->nX; x++) { 193 for (y = 0; y < poly->nY; y++) { 194 psFree(poly->coeff[x][y]); 195 psFree(poly->coeffErr[x][y]); 196 psFree(poly->mask[x][y]); 197 } 198 psFree(poly->coeff[x]); 199 psFree(poly->coeffErr[x]); 200 psFree(poly->mask[x]); 201 } 202 203 psFree(poly->coeff); 204 psFree(poly->coeffErr); 205 psFree(poly->mask); 206 } 207 208 static void dPolynomial4DFree(psDPolynomial4D* poly) 209 { 210 unsigned int x = 0; 211 unsigned int y = 0; 212 unsigned int z = 0; 213 214 for (x = 0; x < poly->nX; x++) { 215 for (y = 0; y < poly->nY; y++) { 216 for (z = 0; z < poly->nZ; z++) { 217 psFree(poly->coeff[x][y][z]); 218 psFree(poly->coeffErr[x][y][z]); 219 psFree(poly->mask[x][y][z]); 220 220 } 221 psFree( myPoly->coeff[w][x]);222 psFree( myPoly->coeffErr[w][x]);223 psFree( myPoly->mask[w][x]);224 } 225 psFree( myPoly->coeff[w]);226 psFree( myPoly->coeffErr[w]);227 psFree( myPoly->mask[w]);228 } 229 230 psFree( myPoly->coeff);231 psFree( myPoly->coeffErr);232 psFree( myPoly->mask);221 psFree(poly->coeff[x][y]); 222 psFree(poly->coeffErr[x][y]); 223 psFree(poly->mask[x][y]); 224 } 225 psFree(poly->coeff[x]); 226 psFree(poly->coeffErr[x]); 227 psFree(poly->mask[x]); 228 } 229 230 psFree(poly->coeff); 231 psFree(poly->coeffErr); 232 psFree(poly->mask); 233 233 } 234 234 … … 280 280 Polynomial coefficients will be accessed in [w][x][y][z] fashion. 281 281 *****************************************************************************/ 282 static psF32 ordPolynomial1DEval(psF32 x, const psPolynomial1D* myPoly)282 static psF32 ordPolynomial1DEval(psF32 x, const psPolynomial1D* poly) 283 283 { 284 284 psS32 loop_x = 0; … … 289 289 "---- Calling ordPolynomial1DEval(%f)\n", x); 290 290 psTrace(".psLib.dataManip.psFunctions.ordPolynomial1DEval", 4, 291 "Polynomial order is %d\n", myPoly->n);292 for (loop_x = 0; loop_x < myPoly->n; loop_x++) {291 "Polynomial order is %d\n", poly->n); 292 for (loop_x = 0; loop_x < poly->n; loop_x++) { 293 293 psTrace(".psLib.dataManip.psFunctions.ordPolynomial1DEval", 4, 294 "Polynomial coeff[%d] is %f\n", loop_x, myPoly->coeff[loop_x]);295 } 296 297 for (loop_x = 0; loop_x < myPoly->n; loop_x++) {298 if ( myPoly->mask[loop_x] == 0) {294 "Polynomial coeff[%d] is %f\n", loop_x, poly->coeff[loop_x]); 295 } 296 297 for (loop_x = 0; loop_x < poly->n; loop_x++) { 298 if (poly->mask[loop_x] == 0) { 299 299 psTrace(".psLib.dataManip.psFunctions.ordPolynomial1DEval", 10, 300 "polysum+= sum*coeff [%f+= (%f * %f)\n", polySum, xSum, myPoly->coeff[loop_x]);301 polySum += xSum * myPoly->coeff[loop_x];300 "polysum+= sum*coeff [%f+= (%f * %f)\n", polySum, xSum, poly->coeff[loop_x]); 301 polySum += xSum * poly->coeff[loop_x]; 302 302 } 303 303 xSum *= x; … … 310 310 // XXX: How does the mask vector effect Crenshaw's formula? 311 311 // XXX: We assume that x is scaled between -1.0 and 1.0; 312 static psF32 chebPolynomial1DEval(psF32 x, const psPolynomial1D* myPoly)312 static psF32 chebPolynomial1DEval(psF32 x, const psPolynomial1D* poly) 313 313 { 314 314 PS_ASSERT_FLOAT_WITHIN_RANGE(x, -1.0, 1.0, 0.0); 315 315 // XXX: Create a macro for this in psConstants.h 316 if ( myPoly->n < 1) {317 psError(PS_ERR_BAD_PARAMETER_VALUE, true, "Error: Chebyshev polynomial as order %d.", myPoly->n);316 if (poly->n < 1) { 317 psError(PS_ERR_BAD_PARAMETER_VALUE, true, "Error: Chebyshev polynomial as order %d.", poly->n); 318 318 return(NAN); 319 319 } 320 320 psVector *d; 321 psS32 n = myPoly->n;321 psS32 n = poly->n; 322 322 psS32 i; 323 323 psF32 tmp = 0.0; … … 325 325 // Special case where the Chebyshev poly is constant. 326 326 if (n == 1) { 327 if ( myPoly->mask[0] == 0) {328 tmp += myPoly->coeff[0];327 if (poly->mask[0] == 0) { 328 tmp += poly->coeff[0]; 329 329 } 330 330 return(tmp); … … 333 333 // Special case where the Chebyshev poly is linear. 334 334 if (n == 2) { 335 if ( myPoly->mask[0] == 0) {336 tmp+= myPoly->coeff[0];337 } 338 if ( myPoly->mask[1] == 0) {339 tmp+= myPoly->coeff[1] * x;335 if (poly->mask[0] == 0) { 336 tmp+= poly->coeff[0]; 337 } 338 if (poly->mask[1] == 0) { 339 tmp+= poly->coeff[1] * x; 340 340 } 341 341 return(tmp); … … 344 344 // General case where the Chebyshev poly has 2 or more terms. 345 345 d = psVectorAlloc(n, PS_TYPE_F32); 346 if( myPoly->mask[n-1] == 0) {347 d->data.F32[n-1] = myPoly->coeff[n-1];346 if(poly->mask[n-1] == 0) { 347 d->data.F32[n-1] = poly->coeff[n-1]; 348 348 } else { 349 349 d->data.F32[n-1] = 0.0; … … 351 351 352 352 d->data.F32[n-2] = (2.0 * x * d->data.F32[n-1]); 353 if( myPoly->mask[n-2] == 0) {354 d->data.F32[n-2] += myPoly->coeff[n-2];353 if(poly->mask[n-2] == 0) { 354 d->data.F32[n-2] += poly->coeff[n-2]; 355 355 } 356 356 … … 358 358 d->data.F32[i] = (2.0 * x * d->data.F32[i+1]) - 359 359 (d->data.F32[i+2]); 360 if( myPoly->mask[i] == 0) {361 d->data.F32[i] += myPoly->coeff[i];360 if(poly->mask[i] == 0) { 361 d->data.F32[i] += poly->coeff[i]; 362 362 } 363 363 } … … 365 365 tmp = (x * d->data.F32[1]) - 366 366 (d->data.F32[2]); 367 if( myPoly->mask[0] == 0) {368 tmp += (0.5 * myPoly->coeff[0]);367 if(poly->mask[0] == 0) { 368 tmp += (0.5 * poly->coeff[0]); 369 369 } 370 370 psFree(d); … … 378 378 psPolynomial1D **chebPolys = NULL; 379 379 380 n = myPoly->n;380 n = poly->n; 381 381 chebPolys = createChebyshevPolys(n); 382 382 383 383 tmp = 0.0; 384 for (i=0;i< myPoly->n;i++) {385 tmp+= ( myPoly->coeff[i] * psPolynomial1DEval(x, chebPolys[i]));386 } 387 tmp-= ( myPoly->coeff[0]/2.0);384 for (i=0;i<poly->n;i++) { 385 tmp+= (poly->coeff[i] * psPolynomial1DEval(x, chebPolys[i])); 386 } 387 tmp-= (poly->coeff[0]/2.0); 388 388 389 389 … … 394 394 static psF32 ordPolynomial2DEval(psF32 x, 395 395 psF32 y, 396 const psPolynomial2D* myPoly)397 { 398 PS_ASSERT_POLY_NON_NULL( myPoly, NAN);396 const psPolynomial2D* poly) 397 { 398 PS_ASSERT_POLY_NON_NULL(poly, NAN); 399 399 400 400 psS32 loop_x = 0; … … 404 404 psF32 ySum = 1.0; 405 405 406 for (loop_x = 0; loop_x < myPoly->nX; loop_x++) {406 for (loop_x = 0; loop_x < poly->nX; loop_x++) { 407 407 ySum = xSum; 408 for (loop_y = 0; loop_y < myPoly->nY; loop_y++) {409 if ( myPoly->mask[loop_x][loop_y] == 0) {410 polySum += ySum * myPoly->coeff[loop_x][loop_y];408 for (loop_y = 0; loop_y < poly->nY; loop_y++) { 409 if (poly->mask[loop_x][loop_y] == 0) { 410 polySum += ySum * poly->coeff[loop_x][loop_y]; 411 411 } 412 412 ySum *= y; … … 418 418 } 419 419 420 static psF32 chebPolynomial2DEval(psF32 x, psF32 y, const psPolynomial2D* myPoly)420 static psF32 chebPolynomial2DEval(psF32 x, psF32 y, const psPolynomial2D* poly) 421 421 { 422 422 PS_ASSERT_FLOAT_WITHIN_RANGE(x, -1.0, 1.0, 0.0); 423 423 PS_ASSERT_FLOAT_WITHIN_RANGE(y, -1.0, 1.0, 0.0); 424 PS_ASSERT_POLY_NON_NULL( myPoly, NAN);424 PS_ASSERT_POLY_NON_NULL(poly, NAN); 425 425 426 426 psS32 loop_x = 0; … … 433 433 // Determine how many Chebyshev polynomials 434 434 // are needed, then create them. 435 maxChebyPoly = myPoly->nX;436 if ( myPoly->nY > maxChebyPoly) {437 maxChebyPoly = myPoly->nY;435 maxChebyPoly = poly->nX; 436 if (poly->nY > maxChebyPoly) { 437 maxChebyPoly = poly->nY; 438 438 } 439 439 chebPolys = createChebyshevPolys(maxChebyPoly); 440 440 441 for (loop_x = 0; loop_x < myPoly->nX; loop_x++) {442 for (loop_y = 0; loop_y < myPoly->nY; loop_y++) {443 if ( myPoly->mask[loop_x][loop_y] == 0) {444 polySum += myPoly->coeff[loop_x][loop_y] *441 for (loop_x = 0; loop_x < poly->nX; loop_x++) { 442 for (loop_y = 0; loop_y < poly->nY; loop_y++) { 443 if (poly->mask[loop_x][loop_y] == 0) { 444 polySum += poly->coeff[loop_x][loop_y] * 445 445 psPolynomial1DEval(chebPolys[loop_x], x) * 446 446 psPolynomial1DEval(chebPolys[loop_y], y); … … 455 455 } 456 456 457 static psF32 ordPolynomial3DEval(psF32 x, psF32 y, psF32 z, const psPolynomial3D* myPoly)457 static psF32 ordPolynomial3DEval(psF32 x, psF32 y, psF32 z, const psPolynomial3D* poly) 458 458 { 459 459 psS32 loop_x = 0; … … 465 465 psF32 zSum = 1.0; 466 466 467 for (loop_x = 0; loop_x < myPoly->nX; loop_x++) {467 for (loop_x = 0; loop_x < poly->nX; loop_x++) { 468 468 ySum = xSum; 469 for (loop_y = 0; loop_y < myPoly->nY; loop_y++) {469 for (loop_y = 0; loop_y < poly->nY; loop_y++) { 470 470 zSum = ySum; 471 for (loop_z = 0; loop_z < myPoly->nZ; loop_z++) {472 if ( myPoly->mask[loop_x][loop_y][loop_z] == 0) {473 polySum += zSum * myPoly->coeff[loop_x][loop_y][loop_z];471 for (loop_z = 0; loop_z < poly->nZ; loop_z++) { 472 if (poly->mask[loop_x][loop_y][loop_z] == 0) { 473 polySum += zSum * poly->coeff[loop_x][loop_y][loop_z]; 474 474 } 475 475 zSum *= z; … … 483 483 } 484 484 485 static psF32 chebPolynomial3DEval(psF32 x, psF32 y, psF32 z, const psPolynomial3D* myPoly)485 static psF32 chebPolynomial3DEval(psF32 x, psF32 y, psF32 z, const psPolynomial3D* poly) 486 486 { 487 487 PS_ASSERT_FLOAT_WITHIN_RANGE(x, -1.0, 1.0, 0.0); … … 498 498 // Determine how many Chebyshev polynomials 499 499 // are needed, then create them. 500 maxChebyPoly = myPoly->nX;501 if ( myPoly->nY > maxChebyPoly) {502 maxChebyPoly = myPoly->nY;503 } 504 if ( myPoly->nZ > maxChebyPoly) {505 maxChebyPoly = myPoly->nZ;500 maxChebyPoly = poly->nX; 501 if (poly->nY > maxChebyPoly) { 502 maxChebyPoly = poly->nY; 503 } 504 if (poly->nZ > maxChebyPoly) { 505 maxChebyPoly = poly->nZ; 506 506 } 507 507 chebPolys = createChebyshevPolys(maxChebyPoly); 508 508 509 for (loop_x = 0; loop_x < myPoly->nX; loop_x++) {510 for (loop_y = 0; loop_y < myPoly->nY; loop_y++) {511 for (loop_z = 0; loop_z < myPoly->nZ; loop_z++) {512 if ( myPoly->mask[loop_x][loop_y][loop_z] == 0) {513 polySum += myPoly->coeff[loop_x][loop_y][loop_z] *509 for (loop_x = 0; loop_x < poly->nX; loop_x++) { 510 for (loop_y = 0; loop_y < poly->nY; loop_y++) { 511 for (loop_z = 0; loop_z < poly->nZ; loop_z++) { 512 if (poly->mask[loop_x][loop_y][loop_z] == 0) { 513 polySum += poly->coeff[loop_x][loop_y][loop_z] * 514 514 psPolynomial1DEval(chebPolys[loop_x], x) * 515 515 psPolynomial1DEval(chebPolys[loop_y], y) * … … 527 527 } 528 528 529 static psF32 ordPolynomial4DEval(psF32 w, psF32 x, psF32 y, psF32 z, const psPolynomial4D* myPoly) 530 { 531 psS32 loop_w = 0; 529 static psF32 ordPolynomial4DEval(psF32 x, psF32 y, psF32 z, psF32 t, const psPolynomial4D* poly) 530 { 532 531 psS32 loop_x = 0; 533 532 psS32 loop_y = 0; 534 533 psS32 loop_z = 0; 534 psS32 loop_t = 0; 535 535 psF32 polySum = 0.0; 536 psF32 wSum = 1.0;537 536 psF32 xSum = 1.0; 538 537 psF32 ySum = 1.0; 539 538 psF32 zSum = 1.0; 540 541 for (loop_w = 0; loop_w < myPoly->nW; loop_w++) { 542 xSum = wSum; 543 for (loop_x = 0; loop_x < myPoly->nX; loop_x++) { 544 ySum = xSum; 545 for (loop_y = 0; loop_y < myPoly->nY; loop_y++) { 546 zSum = ySum; 547 for (loop_z = 0; loop_z < myPoly->nZ; loop_z++) { 548 if (myPoly->mask[loop_w][loop_x][loop_y][loop_z] == 0) { 549 polySum += zSum * myPoly->coeff[loop_w][loop_x][loop_y][loop_z]; 539 psF32 tSum = 1.0; 540 541 for (loop_x = 0; loop_x < poly->nX; loop_x++) { 542 ySum = xSum; 543 for (loop_y = 0; loop_y < poly->nY; loop_y++) { 544 zSum = ySum; 545 for (loop_z = 0; loop_z < poly->nZ; loop_z++) { 546 tSum = zSum; 547 for (loop_t = 0; loop_t < poly->nT; loop_t++) { 548 if (poly->mask[loop_x][loop_y][loop_z][loop_t] == 0) { 549 polySum += tSum * poly->coeff[loop_x][loop_y][loop_z][loop_t]; 550 550 } 551 zSum *= z;551 tSum *= t; 552 552 } 553 ySum *= y;553 zSum *= z; 554 554 } 555 xSum *= x;556 } 557 wSum *= w;555 ySum *= y; 556 } 557 xSum *= x; 558 558 } 559 559 … … 561 561 } 562 562 563 static psF32 chebPolynomial4DEval(psF32 w, psF32 x, psF32 y, psF32 z, const psPolynomial4D* myPoly) 564 { 565 PS_ASSERT_FLOAT_WITHIN_RANGE(w, -1.0, 1.0, 0.0); 563 static psF32 chebPolynomial4DEval(psF32 x, psF32 y, psF32 z, psF32 t, const psPolynomial4D* poly) 564 { 566 565 PS_ASSERT_FLOAT_WITHIN_RANGE(x, -1.0, 1.0, 0.0); 567 566 PS_ASSERT_FLOAT_WITHIN_RANGE(y, -1.0, 1.0, 0.0); 568 567 PS_ASSERT_FLOAT_WITHIN_RANGE(z, -1.0, 1.0, 0.0); 569 psS32 loop_w = 0;568 PS_ASSERT_FLOAT_WITHIN_RANGE(t, -1.0, 1.0, 0.0); 570 569 psS32 loop_x = 0; 571 570 psS32 loop_y = 0; 572 571 psS32 loop_z = 0; 572 psS32 loop_t = 0; 573 573 psS32 i = 0; 574 574 psF32 polySum = 0.0; … … 578 578 // Determine how many Chebyshev polynomials 579 579 // are needed, then create them. 580 maxChebyPoly = myPoly->nW;581 if ( myPoly->nX> maxChebyPoly) {582 maxChebyPoly = myPoly->nX;583 } 584 if ( myPoly->nY> maxChebyPoly) {585 maxChebyPoly = myPoly->nY;586 } 587 if ( myPoly->nZ> maxChebyPoly) {588 maxChebyPoly = myPoly->nZ;580 maxChebyPoly = poly->nX; 581 if (poly->nY > maxChebyPoly) { 582 maxChebyPoly = poly->nY; 583 } 584 if (poly->nZ > maxChebyPoly) { 585 maxChebyPoly = poly->nZ; 586 } 587 if (poly->nT > maxChebyPoly) { 588 maxChebyPoly = poly->nT; 589 589 } 590 590 chebPolys = createChebyshevPolys(maxChebyPoly); 591 591 592 for (loop_w = 0; loop_w < myPoly->nW; loop_w++) { 593 for (loop_x = 0; loop_x < myPoly->nX; loop_x++) { 594 for (loop_y = 0; loop_y < myPoly->nY; loop_y++) { 595 for (loop_z = 0; loop_z < myPoly->nZ; loop_z++) { 596 if (myPoly->mask[loop_w][loop_x][loop_y][loop_z] == 0) { 597 polySum += myPoly->coeff[loop_w][loop_x][loop_y][loop_z] * 598 psPolynomial1DEval(chebPolys[loop_w], w) * 592 for (loop_x = 0; loop_x < poly->nX; loop_x++) { 593 for (loop_y = 0; loop_y < poly->nY; loop_y++) { 594 for (loop_z = 0; loop_z < poly->nZ; loop_z++) { 595 for (loop_t = 0; loop_t < poly->nT; loop_t++) { 596 if (poly->mask[loop_x][loop_y][loop_z][loop_t] == 0) { 597 polySum += poly->coeff[loop_x][loop_y][loop_z][loop_t] * 599 598 psPolynomial1DEval(chebPolys[loop_x], x) * 600 599 psPolynomial1DEval(chebPolys[loop_y], y) * 601 psPolynomial1DEval(chebPolys[loop_z], z); 600 psPolynomial1DEval(chebPolys[loop_z], z) * 601 psPolynomial1DEval(chebPolys[loop_t], t); 602 602 } 603 603 } … … 616 616 Polynomial coefficients will be accessed in [w][x][y][z] fashion. 617 617 *****************************************************************************/ 618 static psF64 dOrdPolynomial1DEval(psF64 x, const psDPolynomial1D* myPoly)618 static psF64 dOrdPolynomial1DEval(psF64 x, const psDPolynomial1D* poly) 619 619 { 620 620 psS32 loop_x = 0; … … 622 622 psF64 xSum = 1.0; 623 623 624 for (loop_x = 0; loop_x < myPoly->n; loop_x++) {625 if ( myPoly->mask[loop_x] == 0) {626 polySum += xSum * myPoly->coeff[loop_x];624 for (loop_x = 0; loop_x < poly->n; loop_x++) { 625 if (poly->mask[loop_x] == 0) { 626 polySum += xSum * poly->coeff[loop_x]; 627 627 } 628 628 xSum *= x; … … 634 634 // XXX: You can do this without having to psAlloc() vector d. 635 635 // XXX: How does the mask vector effect Crenshaw's formula? 636 static psF64 dChebPolynomial1DEval(psF64 x, const psDPolynomial1D* myPoly)636 static psF64 dChebPolynomial1DEval(psF64 x, const psDPolynomial1D* poly) 637 637 { 638 638 PS_ASSERT_FLOAT_WITHIN_RANGE(x, -1.0, 1.0, 0.0); … … 642 642 psF64 tmp; 643 643 644 n = myPoly->n;644 n = poly->n; 645 645 d = psVectorAlloc(n, PS_TYPE_F64); 646 if( myPoly->mask[n-1] == 0) {647 d->data.F64[n-1] = myPoly->coeff[n-1];646 if(poly->mask[n-1] == 0) { 647 d->data.F64[n-1] = poly->coeff[n-1]; 648 648 } else { 649 649 d->data.F64[n-1] = 0.0; 650 650 } 651 651 d->data.F64[n-2] = (2.0 * x * d->data.F64[n-1]); 652 if( myPoly->mask[n-2] == 0) {653 d->data.F64[n-2] += myPoly->coeff[n-2];652 if(poly->mask[n-2] == 0) { 653 d->data.F64[n-2] += poly->coeff[n-2]; 654 654 } 655 655 for (i=n-3;i>=1;i--) { 656 656 d->data.F64[i] = (2.0 * x * d->data.F64[i+1]) - 657 657 (d->data.F64[i+2]); 658 if( myPoly->mask[i] == 0) {659 d->data.F64[i] += myPoly->coeff[i];658 if(poly->mask[i] == 0) { 659 d->data.F64[i] += poly->coeff[i]; 660 660 } 661 661 } … … 663 663 tmp = (x * d->data.F64[1]) - 664 664 (d->data.F64[2]); 665 if( myPoly->mask[0] == 0) {666 tmp += (0.5 * myPoly->coeff[0]);665 if(poly->mask[0] == 0) { 666 tmp += (0.5 * poly->coeff[0]); 667 667 } 668 668 … … 673 673 static psF64 dOrdPolynomial2DEval(psF64 x, 674 674 psF64 y, 675 const psDPolynomial2D* myPoly)675 const psDPolynomial2D* poly) 676 676 { 677 677 psS32 loop_x = 0; … … 681 681 psF64 ySum = 1.0; 682 682 683 for (loop_x = 0; loop_x < myPoly->nX; loop_x++) {683 for (loop_x = 0; loop_x < poly->nX; loop_x++) { 684 684 ySum = xSum; 685 for (loop_y = 0; loop_y < myPoly->nY; loop_y++) {686 if ( myPoly->mask[loop_x][loop_y] == 0) {687 polySum += ySum * myPoly->coeff[loop_x][loop_y];685 for (loop_y = 0; loop_y < poly->nY; loop_y++) { 686 if (poly->mask[loop_x][loop_y] == 0) { 687 polySum += ySum * poly->coeff[loop_x][loop_y]; 688 688 } 689 689 ySum *= y; … … 695 695 } 696 696 697 static psF64 dChebPolynomial2DEval(psF64 x, psF64 y, const psDPolynomial2D* myPoly)697 static psF64 dChebPolynomial2DEval(psF64 x, psF64 y, const psDPolynomial2D* poly) 698 698 { 699 699 PS_ASSERT_FLOAT_WITHIN_RANGE(x, -1.0, 1.0, 0.0); … … 708 708 // Determine how many Chebyshev polynomials 709 709 // are needed, then create them. 710 maxChebyPoly = myPoly->nX;711 if ( myPoly->nY > maxChebyPoly) {712 maxChebyPoly = myPoly->nY;710 maxChebyPoly = poly->nX; 711 if (poly->nY > maxChebyPoly) { 712 maxChebyPoly = poly->nY; 713 713 } 714 714 chebPolys = createChebyshevPolys(maxChebyPoly); 715 715 716 for (loop_x = 0; loop_x < myPoly->nX; loop_x++) {717 for (loop_y = 0; loop_y < myPoly->nY; loop_y++) {718 if ( myPoly->mask[loop_x][loop_y] == 0) {719 polySum += myPoly->coeff[loop_x][loop_y] *716 for (loop_x = 0; loop_x < poly->nX; loop_x++) { 717 for (loop_y = 0; loop_y < poly->nY; loop_y++) { 718 if (poly->mask[loop_x][loop_y] == 0) { 719 polySum += poly->coeff[loop_x][loop_y] * 720 720 psPolynomial1DEval(chebPolys[loop_x], x) * 721 721 psPolynomial1DEval(chebPolys[loop_y], y); … … 731 731 } 732 732 733 static psF64 dOrdPolynomial3DEval(psF64 x, psF64 y, psF64 z, const psDPolynomial3D* myPoly)733 static psF64 dOrdPolynomial3DEval(psF64 x, psF64 y, psF64 z, const psDPolynomial3D* poly) 734 734 { 735 735 psS32 loop_x = 0; … … 741 741 psF64 zSum = 1.0; 742 742 743 for (loop_x = 0; loop_x < myPoly->nX; loop_x++) {743 for (loop_x = 0; loop_x < poly->nX; loop_x++) { 744 744 ySum = xSum; 745 for (loop_y = 0; loop_y < myPoly->nY; loop_y++) {745 for (loop_y = 0; loop_y < poly->nY; loop_y++) { 746 746 zSum = ySum; 747 for (loop_z = 0; loop_z < myPoly->nZ; loop_z++) {748 if ( myPoly->mask[loop_x][loop_y][loop_z] == 0) {749 polySum += zSum * myPoly->coeff[loop_x][loop_y][loop_z];747 for (loop_z = 0; loop_z < poly->nZ; loop_z++) { 748 if (poly->mask[loop_x][loop_y][loop_z] == 0) { 749 polySum += zSum * poly->coeff[loop_x][loop_y][loop_z]; 750 750 } 751 751 zSum *= z; … … 759 759 } 760 760 761 static psF64 dChebPolynomial3DEval(psF64 x, psF64 y, psF64 z, const psDPolynomial3D* myPoly)761 static psF64 dChebPolynomial3DEval(psF64 x, psF64 y, psF64 z, const psDPolynomial3D* poly) 762 762 { 763 763 PS_ASSERT_FLOAT_WITHIN_RANGE(x, -1.0, 1.0, 0.0); … … 774 774 // Determine how many Chebyshev polynomials 775 775 // are needed, then create them. 776 maxChebyPoly = myPoly->nX;777 if ( myPoly->nY > maxChebyPoly) {778 maxChebyPoly = myPoly->nY;779 } 780 if ( myPoly->nZ > maxChebyPoly) {781 maxChebyPoly = myPoly->nZ;776 maxChebyPoly = poly->nX; 777 if (poly->nY > maxChebyPoly) { 778 maxChebyPoly = poly->nY; 779 } 780 if (poly->nZ > maxChebyPoly) { 781 maxChebyPoly = poly->nZ; 782 782 } 783 783 chebPolys = createChebyshevPolys(maxChebyPoly); 784 784 785 for (loop_x = 0; loop_x < myPoly->nX; loop_x++) {786 for (loop_y = 0; loop_y < myPoly->nY; loop_y++) {787 for (loop_z = 0; loop_z < myPoly->nZ; loop_z++) {788 if ( myPoly->mask[loop_x][loop_y][loop_z] == 0) {789 polySum += myPoly->coeff[loop_x][loop_y][loop_z] *785 for (loop_x = 0; loop_x < poly->nX; loop_x++) { 786 for (loop_y = 0; loop_y < poly->nY; loop_y++) { 787 for (loop_z = 0; loop_z < poly->nZ; loop_z++) { 788 if (poly->mask[loop_x][loop_y][loop_z] == 0) { 789 polySum += poly->coeff[loop_x][loop_y][loop_z] * 790 790 psPolynomial1DEval(chebPolys[loop_x], x) * 791 791 psPolynomial1DEval(chebPolys[loop_y], y) * … … 803 803 } 804 804 805 static psF64 dOrdPolynomial4DEval(psF64 w, psF64 x, psF64 y, psF64 z, const psDPolynomial4D* myPoly) 806 { 807 psS32 loop_w = 0; 805 static psF64 dOrdPolynomial4DEval(psF64 x, psF64 y, psF64 z, psF64 t, const psDPolynomial4D* poly) 806 { 808 807 psS32 loop_x = 0; 809 808 psS32 loop_y = 0; 810 809 psS32 loop_z = 0; 810 psS32 loop_t = 0; 811 811 psF64 polySum = 0.0; 812 psF64 wSum = 1.0;813 812 psF64 xSum = 1.0; 814 813 psF64 ySum = 1.0; 815 814 psF64 zSum = 1.0; 816 817 for (loop_w = 0; loop_w < myPoly->nW; loop_w++) { 818 xSum = wSum; 819 for (loop_x = 0; loop_x < myPoly->nX; loop_x++) { 820 ySum = xSum; 821 for (loop_y = 0; loop_y < myPoly->nY; loop_y++) { 822 zSum = ySum; 823 for (loop_z = 0; loop_z < myPoly->nZ; loop_z++) { 824 if (myPoly->mask[loop_w][loop_x][loop_y][loop_z] == 0) { 825 polySum += zSum * myPoly->coeff[loop_w][loop_x][loop_y][loop_z]; 815 psF64 tSum = 1.0; 816 817 for (loop_x = 0; loop_x < poly->nX; loop_x++) { 818 ySum = xSum; 819 for (loop_y = 0; loop_y < poly->nY; loop_y++) { 820 zSum = ySum; 821 for (loop_z = 0; loop_z < poly->nZ; loop_z++) { 822 tSum = zSum; 823 for (loop_t = 0; loop_t < poly->nT; loop_t++) { 824 if (poly->mask[loop_x][loop_y][loop_z][loop_t] == 0) { 825 polySum += tSum * poly->coeff[loop_x][loop_y][loop_z][loop_t]; 826 826 } 827 zSum *= z;827 tSum *= t; 828 828 } 829 ySum *= y;829 zSum *= z; 830 830 } 831 xSum *= x;832 } 833 wSum *= w;831 ySum *= y; 832 } 833 xSum *= x; 834 834 } 835 835 … … 837 837 } 838 838 839 static psF64 dChebPolynomial4DEval(psF64 w, psF64 x, psF64 y, psF64 z, const psDPolynomial4D* myPoly) 840 { 841 PS_ASSERT_FLOAT_WITHIN_RANGE(w, -1.0, 1.0, 0.0); 839 static psF64 dChebPolynomial4DEval(psF64 x, psF64 y, psF64 z, psF64 t, const psDPolynomial4D* poly) 840 { 842 841 PS_ASSERT_FLOAT_WITHIN_RANGE(x, -1.0, 1.0, 0.0); 843 842 PS_ASSERT_FLOAT_WITHIN_RANGE(y, -1.0, 1.0, 0.0); 844 843 PS_ASSERT_FLOAT_WITHIN_RANGE(z, -1.0, 1.0, 0.0); 845 psS32 loop_w = 0;844 PS_ASSERT_FLOAT_WITHIN_RANGE(t, -1.0, 1.0, 0.0); 846 845 psS32 loop_x = 0; 847 846 psS32 loop_y = 0; 848 847 psS32 loop_z = 0; 848 psS32 loop_t = 0; 849 849 psS32 i = 0; 850 850 psF64 polySum = 0.0; … … 854 854 // Determine how many Chebyshev polynomials 855 855 // are needed, then create them. 856 maxChebyPoly = myPoly->nW;857 if ( myPoly->nX> maxChebyPoly) {858 maxChebyPoly = myPoly->nX;859 } 860 if ( myPoly->nY> maxChebyPoly) {861 maxChebyPoly = myPoly->nY;862 } 863 if ( myPoly->nZ> maxChebyPoly) {864 maxChebyPoly = myPoly->nZ;856 maxChebyPoly = poly->nX; 857 if (poly->nY > maxChebyPoly) { 858 maxChebyPoly = poly->nY; 859 } 860 if (poly->nZ > maxChebyPoly) { 861 maxChebyPoly = poly->nZ; 862 } 863 if (poly->nT > maxChebyPoly) { 864 maxChebyPoly = poly->nT; 865 865 } 866 866 chebPolys = createChebyshevPolys(maxChebyPoly); 867 867 868 for (loop_w = 0; loop_w < myPoly->nW; loop_w++) { 869 for (loop_x = 0; loop_x < myPoly->nX; loop_x++) { 870 for (loop_y = 0; loop_y < myPoly->nY; loop_y++) { 871 for (loop_z = 0; loop_z < myPoly->nZ; loop_z++) { 872 if (myPoly->mask[loop_w][loop_x][loop_y][loop_z] == 0) { 873 polySum += myPoly->coeff[loop_w][loop_x][loop_y][loop_z] * 874 psPolynomial1DEval(chebPolys[loop_w], w) * 868 for (loop_x = 0; loop_x < poly->nX; loop_x++) { 869 for (loop_y = 0; loop_y < poly->nY; loop_y++) { 870 for (loop_z = 0; loop_z < poly->nZ; loop_z++) { 871 for (loop_t = 0; loop_t < poly->nT; loop_t++) { 872 if (poly->mask[loop_x][loop_y][loop_z][loop_t] == 0) { 873 polySum += poly->coeff[loop_x][loop_y][loop_z][loop_t] * 875 874 psPolynomial1DEval(chebPolys[loop_x], x) * 876 875 psPolynomial1DEval(chebPolys[loop_y], y) * 877 psPolynomial1DEval(chebPolys[loop_z], z); 876 psPolynomial1DEval(chebPolys[loop_z], z) * 877 psPolynomial1DEval(chebPolys[loop_t], t); 878 878 } 879 879 } … … 1069 1069 This routine must allocate memory for the polynomial structures. 1070 1070 *****************************************************************************/ 1071 psPolynomial1D* psPolynomial1DAlloc( psS32n,1071 psPolynomial1D* psPolynomial1DAlloc(int n, 1072 1072 psPolynomialType type) 1073 1073 { 1074 1074 PS_ASSERT_INT_POSITIVE(n, NULL); 1075 1075 1076 psS32i = 0;1076 int i = 0; 1077 1077 psPolynomial1D* newPoly = NULL; 1078 1078 … … 1094 1094 } 1095 1095 1096 psPolynomial2D* psPolynomial2DAlloc( psS32 nX, psS32nY,1096 psPolynomial2D* psPolynomial2DAlloc(int nX, int nY, 1097 1097 psPolynomialType type) 1098 1098 { … … 1100 1100 PS_ASSERT_INT_POSITIVE(nY, NULL); 1101 1101 1102 psS32x = 0;1103 psS32y = 0;1102 int x = 0; 1103 int y = 0; 1104 1104 psPolynomial2D* newPoly = NULL; 1105 1105 … … 1130 1130 } 1131 1131 1132 psPolynomial3D* psPolynomial3DAlloc( psS32 nX, psS32 nY, psS32nZ,1132 psPolynomial3D* psPolynomial3DAlloc(int nX, int nY, int nZ, 1133 1133 psPolynomialType type) 1134 1134 { … … 1176 1176 } 1177 1177 1178 psPolynomial4D* psPolynomial4DAlloc( psS32 nW, psS32 nX, psS32 nY, psS32 nZ,1178 psPolynomial4D* psPolynomial4DAlloc(int nX, int nY, int nZ, int nT, 1179 1179 psPolynomialType type) 1180 1180 { 1181 PS_ASSERT_INT_POSITIVE(nW, NULL);1182 1181 PS_ASSERT_INT_POSITIVE(nX, NULL); 1183 1182 PS_ASSERT_INT_POSITIVE(nY, NULL); 1184 1183 PS_ASSERT_INT_POSITIVE(nZ, NULL); 1185 1186 psS32 w = 0; 1184 PS_ASSERT_INT_POSITIVE(nT, NULL); 1185 1187 1186 psS32 x = 0; 1188 1187 psS32 y = 0; 1189 1188 psS32 z = 0; 1189 psS32 t = 0; 1190 1190 psPolynomial4D* newPoly = NULL; 1191 1191 … … 1194 1194 1195 1195 newPoly->type = type; 1196 newPoly->nW = nW;1197 1196 newPoly->nX = nX; 1198 1197 newPoly->nY = nY; 1199 1198 newPoly->nZ = nZ; 1200 1201 newPoly->coeff = (psF32 ****)psAlloc(nW * sizeof(psF32 ***)); 1202 newPoly->coeffErr = (psF32 ****)psAlloc(nW * sizeof(psF32 ***)); 1203 newPoly->mask = (psU8 ****)psAlloc(nW * sizeof(psU8 ***)); 1204 for (w = 0; w < nW; w++) { 1205 newPoly->coeff[w] = (psF32 ***)psAlloc(nX * sizeof(psF32 **)); 1206 newPoly->coeffErr[w] = (psF32 ***)psAlloc(nX * sizeof(psF32 **)); 1207 newPoly->mask[w] = (psU8 ***)psAlloc(nX * sizeof(psU8 **)); 1208 for (x = 0; x < nX; x++) { 1209 newPoly->coeff[w][x] = (psF32 **)psAlloc(nY * sizeof(psF32 *)); 1210 newPoly->coeffErr[w][x] = (psF32 **)psAlloc(nY * sizeof(psF32 *)); 1211 newPoly->mask[w][x] = (psU8 **)psAlloc(nY * sizeof(psU8 *)); 1212 for (y = 0; y < nY; y++) { 1213 newPoly->coeff[w][x][y] = (psF32 *)psAlloc(nZ * sizeof(psF32)); 1214 newPoly->coeffErr[w][x][y] = (psF32 *)psAlloc(nZ * sizeof(psF32)); 1215 newPoly->mask[w][x][y] = (psU8 *)psAlloc(nZ * sizeof(psU8)); 1199 newPoly->nT = nT; 1200 1201 newPoly->coeff = (psF32 ****)psAlloc(nX * sizeof(psF32 ***)); 1202 newPoly->coeffErr = (psF32 ****)psAlloc(nX * sizeof(psF32 ***)); 1203 newPoly->mask = (psU8 ****)psAlloc(nX * sizeof(psU8 ***)); 1204 for (x = 0; x < nX; x++) { 1205 newPoly->coeff[x] = (psF32 ***)psAlloc(nY * sizeof(psF32 **)); 1206 newPoly->coeffErr[x] = (psF32 ***)psAlloc(nY * sizeof(psF32 **)); 1207 newPoly->mask[x] = (psU8 ***)psAlloc(nY * sizeof(psU8 **)); 1208 for (y = 0; y < nY; y++) { 1209 newPoly->coeff[x][y] = (psF32 **)psAlloc(nZ * sizeof(psF32 *)); 1210 newPoly->coeffErr[x][y] = (psF32 **)psAlloc(nZ * sizeof(psF32 *)); 1211 newPoly->mask[x][y] = (psU8 **)psAlloc(nZ * sizeof(psU8 *)); 1212 for (z = 0; z < nZ; z++) { 1213 newPoly->coeff[x][y][z] = (psF32 *)psAlloc(nT * sizeof(psF32)); 1214 newPoly->coeffErr[x][y][z] = (psF32 *)psAlloc(nT * sizeof(psF32)); 1215 newPoly->mask[x][y][z] = (psU8 *)psAlloc(nT * sizeof(psU8)); 1216 1216 } 1217 1217 } 1218 1218 } 1219 for ( w = 0; w < nW; w++) {1220 for ( x = 0; x < nX; x++) {1221 for ( y = 0; y < nY; y++) {1222 for ( z = 0; z < nZ; z++) {1223 newPoly->coeff[ w][x][y][z] = 0.0;1224 newPoly->coeffErr[ w][x][y][z] = 0.0;1225 newPoly->mask[ w][x][y][z] = 0;1219 for (x = 0; x < nX; x++) { 1220 for (y = 0; y < nY; y++) { 1221 for (z = 0; z < nZ; z++) { 1222 for (t = 0; t < nT; t++) { 1223 newPoly->coeff[x][y][z][t] = 0.0; 1224 newPoly->coeffErr[x][y][z][t] = 0.0; 1225 newPoly->mask[x][y][z][t] = 0; 1226 1226 } 1227 1227 } … … 1431 1431 1432 1432 1433 psDPolynomial1D* psDPolynomial1DAlloc( psS32n,1433 psDPolynomial1D* psDPolynomial1DAlloc(int n, 1434 1434 psPolynomialType type) 1435 1435 { 1436 1436 PS_ASSERT_INT_POSITIVE(n, NULL); 1437 1437 1438 psS32i = 0;1438 unsigned int i = 0; 1439 1439 psDPolynomial1D* newPoly = NULL; 1440 1440 … … 1456 1456 } 1457 1457 1458 psDPolynomial2D* psDPolynomial2DAlloc( psS32 nX, psS32nY,1458 psDPolynomial2D* psDPolynomial2DAlloc(int nX, int nY, 1459 1459 psPolynomialType type) 1460 1460 { … … 1462 1462 PS_ASSERT_INT_POSITIVE(nY, NULL); 1463 1463 1464 psS32x = 0;1465 psS32y = 0;1464 unsigned int x = 0; 1465 unsigned int y = 0; 1466 1466 psDPolynomial2D* newPoly = NULL; 1467 1467 … … 1492 1492 } 1493 1493 1494 psDPolynomial3D* psDPolynomial3DAlloc( psS32 nX, psS32 nY, psS32nZ,1494 psDPolynomial3D* psDPolynomial3DAlloc(int nX, int nY, int nZ, 1495 1495 psPolynomialType type) 1496 1496 { … … 1499 1499 PS_ASSERT_INT_POSITIVE(nZ, NULL); 1500 1500 1501 psS32x = 0;1502 psS32y = 0;1503 psS32z = 0;1501 unsigned int x = 0; 1502 unsigned int y = 0; 1503 unsigned int z = 0; 1504 1504 psDPolynomial3D* newPoly = NULL; 1505 1505 … … 1538 1538 } 1539 1539 1540 psDPolynomial4D* psDPolynomial4DAlloc( psS32 nW, psS32 nX, psS32 nY, psS32 nZ,1540 psDPolynomial4D* psDPolynomial4DAlloc(int nX, int nY, int nZ, int nT, 1541 1541 psPolynomialType type) 1542 1542 { 1543 PS_ASSERT_INT_POSITIVE(nW, NULL);1544 1543 PS_ASSERT_INT_POSITIVE(nX, NULL); 1545 1544 PS_ASSERT_INT_POSITIVE(nY, NULL); 1546 1545 PS_ASSERT_INT_POSITIVE(nZ, NULL); 1547 1548 psS32 w = 0; 1549 psS32 x = 0; 1550 psS32 y = 0; 1551 psS32 z = 0; 1546 PS_ASSERT_INT_POSITIVE(nT, NULL); 1547 1548 unsigned int x = 0; 1549 unsigned int y = 0; 1550 unsigned int z = 0; 1551 unsigned int t = 0; 1552 1552 psDPolynomial4D* newPoly = NULL; 1553 1553 … … 1556 1556 1557 1557 newPoly->type = type; 1558 newPoly->nW = nW;1559 1558 newPoly->nX = nX; 1560 1559 newPoly->nY = nY; 1561 1560 newPoly->nZ = nZ; 1562 1563 newPoly->coeff = (psF64 ****)psAlloc(nW * sizeof(psF64 ***)); 1564 newPoly->coeffErr = (psF64 ****)psAlloc(nW * sizeof(psF64 ***)); 1565 newPoly->mask = (psU8 ****)psAlloc(nW * sizeof(psU8 ***)); 1566 for (w = 0; w < nW; w++) { 1567 newPoly->coeff[w] = (psF64 ***)psAlloc(nX * sizeof(psF64 **)); 1568 newPoly->coeffErr[w] = (psF64 ***)psAlloc(nX * sizeof(psF64 **)); 1569 newPoly->mask[w] = (psU8 ***)psAlloc(nX * sizeof(psU8 **)); 1570 for (x = 0; x < nX; x++) { 1571 newPoly->coeff[w][x] = (psF64 **)psAlloc(nY * sizeof(psF64 *)); 1572 newPoly->coeffErr[w][x] = (psF64 **)psAlloc(nY * sizeof(psF64 *)); 1573 newPoly->mask[w][x] = (psU8 **)psAlloc(nY * sizeof(psU8 *)); 1574 for (y = 0; y < nY; y++) { 1575 newPoly->coeff[w][x][y] = (psF64 *)psAlloc(nZ * sizeof(psF64)); 1576 newPoly->coeffErr[w][x][y] = (psF64 *)psAlloc(nZ * sizeof(psF64)); 1577 newPoly->mask[w][x][y] = (psU8 *)psAlloc(nZ * sizeof(psU8)); 1561 newPoly->nT = nT; 1562 1563 newPoly->coeff = (psF64 ****)psAlloc(nX * sizeof(psF64 ***)); 1564 newPoly->coeffErr = (psF64 ****)psAlloc(nX * sizeof(psF64 ***)); 1565 newPoly->mask = (psU8 ****)psAlloc(nX * sizeof(psU8 ***)); 1566 for (x = 0; x < nX; x++) { 1567 newPoly->coeff[x] = (psF64 ***)psAlloc(nY * sizeof(psF64 **)); 1568 newPoly->coeffErr[x] = (psF64 ***)psAlloc(nY * sizeof(psF64 **)); 1569 newPoly->mask[x] = (psU8 ***)psAlloc(nY * sizeof(psU8 **)); 1570 for (y = 0; y < nY; y++) { 1571 newPoly->coeff[x][y] = (psF64 **)psAlloc(nZ * sizeof(psF64 *)); 1572 newPoly->coeffErr[x][y] = (psF64 **)psAlloc(nZ * sizeof(psF64 *)); 1573 newPoly->mask[x][y] = (psU8 **)psAlloc(nZ * sizeof(psU8 *)); 1574 for (z = 0; z < nZ; z++) { 1575 newPoly->coeff[x][y][z] = (psF64 *)psAlloc(nT * sizeof(psF64)); 1576 newPoly->coeffErr[x][y][z] = (psF64 *)psAlloc(nT * sizeof(psF64)); 1577 newPoly->mask[x][y][z] = (psU8 *)psAlloc(nT * sizeof(psU8)); 1578 1578 } 1579 1579 } 1580 1580 } 1581 for ( w = 0; w < nW; w++) {1582 for ( x = 0; x < nX; x++) {1583 for ( y = 0; y < nY; y++) {1584 for ( z = 0; z < nZ; z++) {1585 newPoly->coeff[ w][x][y][z] = 0.0;1586 newPoly->coeffErr[ w][x][y][z] = 0.0;1587 newPoly->mask[ w][x][y][z] = 0;1581 for (x = 0; x < nX; x++) { 1582 for (y = 0; y < nY; y++) { 1583 for (z = 0; z < nZ; z++) { 1584 for (t = 0; t < nT; t++) { 1585 newPoly->coeff[x][y][z][t] = 0.0; 1586 newPoly->coeffErr[x][y][z][t] = 0.0; 1587 newPoly->mask[x][y][z][t] = 0; 1588 1588 } 1589 1589 } … … 1595 1595 1596 1596 1597 psF64 psDPolynomial1DEval(const psDPolynomial1D* myPoly, psF64 x)1598 { 1599 PS_ASSERT_POLY_NON_NULL( myPoly, NAN);1600 1601 if ( myPoly->type == PS_POLYNOMIAL_ORD) {1602 return(dOrdPolynomial1DEval(x, myPoly));1603 } else if ( myPoly->type == PS_POLYNOMIAL_CHEB) {1604 return(dChebPolynomial1DEval(x, myPoly));1597 psF64 psDPolynomial1DEval(const psDPolynomial1D* poly, psF64 x) 1598 { 1599 PS_ASSERT_POLY_NON_NULL(poly, NAN); 1600 1601 if (poly->type == PS_POLYNOMIAL_ORD) { 1602 return(dOrdPolynomial1DEval(x, poly)); 1603 } else if (poly->type == PS_POLYNOMIAL_CHEB) { 1604 return(dChebPolynomial1DEval(x, poly)); 1605 1605 } else { 1606 1606 psError(PS_ERR_BAD_PARAMETER_TYPE, true, 1607 1607 PS_ERRORTEXT_psFunctions_INVALID_POLYNOMIAL_TYPE, 1608 myPoly->type);1608 poly->type); 1609 1609 } 1610 1610 return(NAN); 1611 1611 } 1612 1612 1613 psVector *psDPolynomial1DEvalVector(const psDPolynomial1D * myPoly,1613 psVector *psDPolynomial1DEvalVector(const psDPolynomial1D *poly, 1614 1614 const psVector *x) 1615 1615 1616 1616 { 1617 PS_ASSERT_POLY_NON_NULL( myPoly, NULL);1617 PS_ASSERT_POLY_NON_NULL(poly, NULL); 1618 1618 PS_ASSERT_VECTOR_NON_NULL(x, NULL); 1619 1619 PS_ASSERT_VECTOR_TYPE(x, PS_TYPE_F64, NULL); … … 1623 1623 tmp = psVectorAlloc(x->n, PS_TYPE_F64); 1624 1624 for (psS32 i=0;i<x->n;i++) { 1625 tmp->data.F64[i] = psDPolynomial1DEval( myPoly,1625 tmp->data.F64[i] = psDPolynomial1DEval(poly, 1626 1626 x->data.F64[i]); 1627 1627 } … … 1631 1631 1632 1632 1633 psF64 psDPolynomial2DEval(const psDPolynomial2D* myPoly,1633 psF64 psDPolynomial2DEval(const psDPolynomial2D* poly, 1634 1634 psF64 x, 1635 1635 psF64 y) 1636 1636 { 1637 PS_ASSERT_POLY_NON_NULL( myPoly, NAN);1638 if ( myPoly->type == PS_POLYNOMIAL_ORD) {1639 return(dOrdPolynomial2DEval(x, y, myPoly));1640 } else if ( myPoly->type == PS_POLYNOMIAL_CHEB) {1641 return(dChebPolynomial2DEval(x, y, myPoly));1637 PS_ASSERT_POLY_NON_NULL(poly, NAN); 1638 if (poly->type == PS_POLYNOMIAL_ORD) { 1639 return(dOrdPolynomial2DEval(x, y, poly)); 1640 } else if (poly->type == PS_POLYNOMIAL_CHEB) { 1641 return(dChebPolynomial2DEval(x, y, poly)); 1642 1642 } else { 1643 1643 psError(PS_ERR_BAD_PARAMETER_TYPE, true, 1644 1644 PS_ERRORTEXT_psFunctions_INVALID_POLYNOMIAL_TYPE, 1645 myPoly->type);1645 poly->type); 1646 1646 } 1647 1647 return(NAN); 1648 1648 } 1649 1649 1650 psVector *psDPolynomial2DEvalVector(const psDPolynomial2D * myPoly,1650 psVector *psDPolynomial2DEvalVector(const psDPolynomial2D *poly, 1651 1651 const psVector *x, 1652 1652 const psVector *y) 1653 1653 { 1654 PS_ASSERT_POLY_NON_NULL( myPoly, NULL);1654 PS_ASSERT_POLY_NON_NULL(poly, NULL); 1655 1655 PS_ASSERT_VECTOR_NON_NULL(x, NULL); 1656 1656 PS_ASSERT_VECTOR_TYPE(x, PS_TYPE_F64, NULL); … … 1671 1671 // Evaluate the polynomial 1672 1672 for (psS32 i = 0; i < vecLen; i++) { 1673 tmp->data.F64[i] = psDPolynomial2DEval( myPoly,x->data.F64[i],y->data.F64[i]);1673 tmp->data.F64[i] = psDPolynomial2DEval(poly,x->data.F64[i],y->data.F64[i]); 1674 1674 } 1675 1675 … … 1679 1679 1680 1680 1681 psF64 psDPolynomial3DEval(const psDPolynomial3D* myPoly,1681 psF64 psDPolynomial3DEval(const psDPolynomial3D* poly, 1682 1682 psF64 x, 1683 1683 psF64 y, 1684 1684 psF64 z) 1685 1685 { 1686 PS_ASSERT_POLY_NON_NULL( myPoly, NAN);1687 1688 if ( myPoly->type == PS_POLYNOMIAL_ORD) {1689 return(dOrdPolynomial3DEval(x, y, z, myPoly));1690 } else if ( myPoly->type == PS_POLYNOMIAL_CHEB) {1691 return(dChebPolynomial3DEval(x, y, z, myPoly));1686 PS_ASSERT_POLY_NON_NULL(poly, NAN); 1687 1688 if (poly->type == PS_POLYNOMIAL_ORD) { 1689 return(dOrdPolynomial3DEval(x, y, z, poly)); 1690 } else if (poly->type == PS_POLYNOMIAL_CHEB) { 1691 return(dChebPolynomial3DEval(x, y, z, poly)); 1692 1692 } else { 1693 1693 psError(PS_ERR_BAD_PARAMETER_TYPE, true, 1694 1694 PS_ERRORTEXT_psFunctions_INVALID_POLYNOMIAL_TYPE, 1695 myPoly->type);1695 poly->type); 1696 1696 } 1697 1697 return(NAN); 1698 1698 } 1699 1699 1700 psVector *psDPolynomial3DEvalVector(const psDPolynomial3D * myPoly,1700 psVector *psDPolynomial3DEvalVector(const psDPolynomial3D *poly, 1701 1701 const psVector *x, 1702 1702 const psVector *y, … … 1704 1704 1705 1705 { 1706 PS_ASSERT_POLY_NON_NULL( myPoly, NULL);1706 PS_ASSERT_POLY_NON_NULL(poly, NULL); 1707 1707 PS_ASSERT_VECTOR_NON_NULL(x, NULL); 1708 1708 PS_ASSERT_VECTOR_TYPE(x, PS_TYPE_F64, NULL); … … 1728 1728 // Evaluate polynomial 1729 1729 for (psS32 i = 0; i < vecLen; i++) { 1730 tmp->data.F64[i] = psDPolynomial3DEval( myPoly,1730 tmp->data.F64[i] = psDPolynomial3DEval(poly, 1731 1731 x->data.F64[i], 1732 1732 y->data.F64[i], … … 1738 1738 } 1739 1739 1740 psF64 psDPolynomial4DEval(const psDPolynomial4D* myPoly, 1741 psF64 w, 1740 psF64 psDPolynomial4DEval(const psDPolynomial4D* poly, 1742 1741 psF64 x, 1743 1742 psF64 y, 1744 psF64 z) 1745 { 1746 PS_ASSERT_POLY_NON_NULL(myPoly, NAN); 1747 1748 if (myPoly->type == PS_POLYNOMIAL_ORD) { 1749 return(dOrdPolynomial4DEval(w,x,y,z, myPoly)); 1750 } else if (myPoly->type == PS_POLYNOMIAL_CHEB) { 1751 return(dChebPolynomial4DEval(w,x,y,z, myPoly)); 1743 psF64 z, 1744 psF64 t) 1745 { 1746 PS_ASSERT_POLY_NON_NULL(poly, NAN); 1747 1748 if (poly->type == PS_POLYNOMIAL_ORD) { 1749 return(dOrdPolynomial4DEval(x,y,z,t, poly)); 1750 } else if (poly->type == PS_POLYNOMIAL_CHEB) { 1751 return(dChebPolynomial4DEval(x,y,z,t, poly)); 1752 1752 } else { 1753 1753 psError(PS_ERR_BAD_PARAMETER_TYPE, true, 1754 1754 PS_ERRORTEXT_psFunctions_INVALID_POLYNOMIAL_TYPE, 1755 myPoly->type);1755 poly->type); 1756 1756 } 1757 1757 return(NAN); 1758 1758 } 1759 1759 1760 psVector *psDPolynomial4DEvalVector(const psDPolynomial4D *myPoly, 1761 const psVector *w, 1760 psVector *psDPolynomial4DEvalVector(const psDPolynomial4D *poly, 1762 1761 const psVector *x, 1763 1762 const psVector *y, 1764 const psVector *z) 1765 { 1766 PS_ASSERT_POLY_NON_NULL(myPoly, NULL); 1767 PS_ASSERT_VECTOR_NON_NULL(w, NULL); 1768 PS_ASSERT_VECTOR_TYPE(w, PS_TYPE_F64, NULL); 1763 const psVector *z, 1764 const psVector *t) 1765 { 1766 PS_ASSERT_POLY_NON_NULL(poly, NULL); 1769 1767 PS_ASSERT_VECTOR_NON_NULL(x, NULL); 1770 1768 PS_ASSERT_VECTOR_TYPE(x, PS_TYPE_F64, NULL); … … 1773 1771 PS_ASSERT_VECTOR_NON_NULL(z, NULL); 1774 1772 PS_ASSERT_VECTOR_TYPE(z, PS_TYPE_F64, NULL); 1773 PS_ASSERT_VECTOR_NON_NULL(t, NULL); 1774 PS_ASSERT_VECTOR_TYPE(t, PS_TYPE_F64, NULL); 1775 1775 1776 1776 psVector *tmp; 1777 psS32 vecLen= w->n;1777 psS32 vecLen=x->n; 1778 1778 1779 1779 // Determine the output vector size from min of input vectors 1780 if (z->n < vecLen) { 1781 vecLen = z->n; 1782 } 1780 1783 if (y->n < vecLen) { 1781 1784 vecLen = y->n; 1782 1785 } 1783 if (x->n < vecLen) { 1784 vecLen = x->n; 1785 } 1786 if (z->n < vecLen) { 1787 vecLen = z->n; 1786 if (t->n < vecLen) { 1787 vecLen = t->n; 1788 1788 } 1789 1789 … … 1793 1793 // Evaluate the polynomial 1794 1794 for (psS32 i = 0; i < vecLen; i++) { 1795 tmp->data.F64[i] = psDPolynomial4DEval(myPoly, 1796 w->data.F64[i], 1795 tmp->data.F64[i] = psDPolynomial4DEval(poly, 1797 1796 x->data.F64[i], 1798 1797 y->data.F64[i], 1799 z->data.F64[i]); 1798 z->data.F64[i], 1799 t->data.F64[i]); 1800 1800 } 1801 1801 -
trunk/psLib/src/math/psSpline.h
r4405 r4422 12 12 * @author GLG, MHPCC 13 13 * 14 * @version $Revision: 1. 49$ $Name: not supported by cvs2svn $15 * @date $Date: 2005-06-2 8 00:53:53$14 * @version $Revision: 1.50 $ $Name: not supported by cvs2svn $ 15 * @date $Date: 2005-06-29 00:43:46 $ 16 16 * 17 17 * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii … … 74 74 { 75 75 psPolynomialType type; ///< Polynomial type 76 psS32 n;///< Number of terms76 unsigned int n; ///< Number of terms 77 77 psF32 *coeff; ///< Coefficients 78 78 psF32 *coeffErr; ///< Error in coefficients … … 85 85 { 86 86 psPolynomialType type; ///< Polynomial type 87 psS32 nX;///< Number of terms in x88 psS32 nY;///< Number of terms in y87 unsigned int nX; ///< Number of terms in x 88 unsigned int nY; ///< Number of terms in y 89 89 psF32 **coeff; ///< Coefficients 90 90 psF32 **coeffErr; ///< Error in coefficients … … 97 97 { 98 98 psPolynomialType type; ///< Polynomial type 99 psS32 nX;///< Number of terms in x100 psS32 nY;///< Number of terms in y101 psS32 nZ;///< Number of terms in z99 unsigned int nX; ///< Number of terms in x 100 unsigned int nY; ///< Number of terms in y 101 unsigned int nZ; ///< Number of terms in z 102 102 psF32 ***coeff; ///< Coefficients 103 103 psF32 ***coeffErr; ///< Error in coefficients … … 110 110 { 111 111 psPolynomialType type; ///< Polynomial type 112 psS32 nW; ///< Number of terms in w113 psS32 nX; ///< Number of terms in x114 psS32 nY; ///< Number of terms in y115 psS32 nZ; ///< Number of terms in z112 unsigned int nX; ///< Number of terms in x 113 unsigned int nY; ///< Number of terms in y 114 unsigned int nZ; ///< Number of terms in z 115 unsigned int nT; ///< Number of terms in t 116 116 psF32 ****coeff; ///< Coefficients 117 117 psF32 ****coeffErr; ///< Error in coefficients … … 126 126 */ 127 127 psPolynomial1D* psPolynomial1DAlloc( 128 psS32 n,///< Number of terms128 int n, ///< Number of terms 129 129 psPolynomialType type ///< Polynomial Type 130 130 ); … … 135 135 */ 136 136 psPolynomial2D* psPolynomial2DAlloc( 137 psS32 nX,///< Number of terms in x138 psS32 nY,///< Number of terms in y137 int nX, ///< Number of terms in x 138 int nY, ///< Number of terms in y 139 139 psPolynomialType type ///< Polynomial Type 140 140 ); … … 145 145 */ 146 146 psPolynomial3D* psPolynomial3DAlloc( 147 psS32 nX,///< Number of terms in x148 psS32 nY,///< Number of terms in y149 psS32 nZ,///< Number of terms in z147 int nX, ///< Number of terms in x 148 int nY, ///< Number of terms in y 149 int nZ, ///< Number of terms in z 150 150 psPolynomialType type ///< Polynomial Type 151 151 ); … … 156 156 */ 157 157 psPolynomial4D* psPolynomial4DAlloc( 158 psS32 nW, ///< Number of terms in w159 psS32 nX, ///< Number of terms in x160 psS32 nY, ///< Number of terms in y161 psS32 nZ, ///< Number of terms in z158 int nX, ///< Number of terms in x 159 int nY, ///< Number of terms in y 160 int nZ, ///< Number of terms in z 161 int nT, ///< Number of terms in t 162 162 psPolynomialType type ///< Polynomial Type 163 163 ); … … 177 177 */ 178 178 psF64 psPolynomial2DEval( 179 const psPolynomial2D* poly, ///< Coefficients for the polynomial180 psF64 x, ///< x location at which to evaluate181 psF64 y ///< y location at which to evaluate179 const psPolynomial2D* poly, ///< Coefficients for the polynomial 180 psF64 x, ///< x location at which to evaluate 181 psF64 y ///< y location at which to evaluate 182 182 ); 183 183 … … 255 255 { 256 256 psPolynomialType type; ///< Polynomial type 257 psS32n; ///< Number of terms257 unsigned int n; ///< Number of terms 258 258 psF64 *coeff; ///< Coefficients 259 259 psF64 *coeffErr; ///< Error in coefficients … … 266 266 { 267 267 psPolynomialType type; ///< Polynomial type 268 psS32nX; ///< Number of terms in x269 psS32nY; ///< Number of terms in y268 unsigned int nX; ///< Number of terms in x 269 unsigned int nY; ///< Number of terms in y 270 270 psF64 **coeff; ///< Coefficients 271 271 psF64 **coeffErr; ///< Error in coefficients … … 278 278 { 279 279 psPolynomialType type; ///< Polynomial type 280 psS32nX; ///< Number of terms in x281 psS32nY; ///< Number of terms in y282 psS32nZ; ///< Number of terms in z280 unsigned int nX; ///< Number of terms in x 281 unsigned int nY; ///< Number of terms in y 282 unsigned int nZ; ///< Number of terms in z 283 283 psF64 ***coeff; ///< Coefficients 284 284 psF64 ***coeffErr; ///< Error in coefficients … … 291 291 { 292 292 psPolynomialType type; ///< Polynomial type 293 psS32 nW; ///< Number of terms in w294 psS32 nX; ///< Number of terms in x295 psS32 nY; ///< Number of terms in y296 psS32 nZ; ///< Number of terms in z293 unsigned int nX; ///< Number of terms in w 294 unsigned int nY; ///< Number of terms in x 295 unsigned int nZ; ///< Number of terms in y 296 unsigned int nT; ///< Number of terms in z 297 297 psF64 ****coeff; ///< Coefficients 298 298 psF64 ****coeffErr; ///< Error in coefficients … … 306 306 */ 307 307 psDPolynomial1D* psDPolynomial1DAlloc( 308 psS32n, ///< Number of terms308 int n, ///< Number of terms 309 309 psPolynomialType type ///< Polynomial Type 310 310 ); … … 315 315 */ 316 316 psDPolynomial2D* psDPolynomial2DAlloc( 317 psS32nX, ///< Number of terms in x318 psS32nY, ///< Number of terms in y317 int nX, ///< Number of terms in x 318 int nY, ///< Number of terms in y 319 319 psPolynomialType type ///< Polynomial Type 320 320 ); … … 325 325 */ 326 326 psDPolynomial3D* psDPolynomial3DAlloc( 327 psS32nX, ///< Number of terms in x328 psS32nY, ///< Number of terms in y329 psS32nZ, ///< Number of terms in z327 int nX, ///< Number of terms in x 328 int nY, ///< Number of terms in y 329 int nZ, ///< Number of terms in z 330 330 psPolynomialType type ///< Polynomial Type 331 331 ); … … 336 336 */ 337 337 psDPolynomial4D* psDPolynomial4DAlloc( 338 psS32 nW, ///< Number of terms in w339 psS32 nX, ///< Number of terms in x340 psS32 nY, ///< Number of terms in y341 psS32 nZ, ///< Number of terms in z338 int nX, ///< Number of terms in w 339 int nY, ///< Number of terms in x 340 int nZ, ///< Number of terms in y 341 int nT, ///< Number of terms in z 342 342 psPolynomialType type ///< Polynomial Type 343 343 ); … … 348 348 */ 349 349 psF64 psDPolynomial1DEval( 350 const psDPolynomial1D* myPoly, ///< Coefficients for the polynomial350 const psDPolynomial1D* poly, ///< Coefficients for the polynomial 351 351 psF64 x ///< Value at which to evaluate 352 352 ); … … 357 357 */ 358 358 psF64 psDPolynomial2DEval( 359 const psDPolynomial2D* myPoly, ///< Coefficients for the polynomial359 const psDPolynomial2D* poly, ///< Coefficients for the polynomial 360 360 psF64 x, ///< Value x at which to evaluate 361 361 psF64 y ///< Value y at which to evaluate … … 367 367 */ 368 368 psF64 psDPolynomial3DEval( 369 const psDPolynomial3D* myPoly, ///< Coefficients for the polynomial369 const psDPolynomial3D* poly, ///< Coefficients for the polynomial 370 370 psF64 x, ///< Value x at which to evaluate 371 371 psF64 y, ///< Value y at which to evaluate … … 378 378 */ 379 379 psF64 psDPolynomial4DEval( 380 const psDPolynomial4D* myPoly, ///< Coefficients for the polynomial381 psF64 w, ///< Value w at which to evaluate382 psF64 x, ///< Value x at which to evaluate383 psF64 y, ///< Value y at which to evaluate384 psF64 z///< Value z at which to evaluate380 const psDPolynomial4D* poly, ///< Coefficients for the polynomial 381 psF64 x, ///< Value w at which to evaluate 382 psF64 y, ///< Value x at which to evaluate 383 psF64 z, ///< Value y at which to evaluate 384 psF64 t ///< Value z at which to evaluate 385 385 ); 386 386 … … 390 390 */ 391 391 psVector *psDPolynomial1DEvalVector( 392 const psDPolynomial1D * myPoly, ///< Coefficients for the polynomial392 const psDPolynomial1D *poly, ///< Coefficients for the polynomial 393 393 const psVector *x ///< x locations at which to evaluate 394 394 ); … … 399 399 */ 400 400 psVector *psDPolynomial2DEvalVector( 401 const psDPolynomial2D * myPoly, ///< Coefficients for the polynomial401 const psDPolynomial2D *poly, ///< Coefficients for the polynomial 402 402 const psVector *x, ///< x locations at which to evaluate 403 403 const psVector *y ///< y locations at which to evaluate … … 409 409 */ 410 410 psVector *psDPolynomial3DEvalVector( 411 const psDPolynomial3D * myPoly, ///< Coefficients for the polynomial411 const psDPolynomial3D *poly, ///< Coefficients for the polynomial 412 412 const psVector *x, ///< x locations at which to evaluate 413 413 const psVector *y, ///< y locations at which to evaluate … … 420 420 */ 421 421 psVector *psDPolynomial4DEvalVector( 422 const psDPolynomial4D * myPoly, ///< Coefficients for the polynomial423 const psVector * w, ///< w locations at which to evaluate424 const psVector * x, ///< x locations at which to evaluate425 const psVector * y, ///< y locations at which to evaluate426 const psVector * z///< z locations at which to evaluate422 const psDPolynomial4D *poly, ///< Coefficients for the polynomial 423 const psVector *x, ///< w locations at which to evaluate 424 const psVector *y, ///< x locations at which to evaluate 425 const psVector *z, ///< y locations at which to evaluate 426 const psVector *t ///< z locations at which to evaluate 427 427 ); 428 428 -
trunk/psLib/test/astronomy/tst_psCoord.c
r3682 r4422 6 6 * @author GLG, MHPCC 7 7 * 8 * @version $Revision: 1.2 8$ $Name: not supported by cvs2svn $9 * @date $Date: 2005-0 4-07 20:27:41$8 * @version $Revision: 1.29 $ $Name: not supported by cvs2svn $ 9 * @date $Date: 2005-06-29 00:43:46 $ 10 10 * 11 11 * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii … … 104 104 } 105 105 106 #define N W_TERMS 2107 #define N X_TERMS 3108 #define N Y_TERMS 4109 #define N Z_TERMS 5106 #define NX_TERMS 2 107 #define NY_TERMS 3 108 #define NZ_TERMS 4 109 #define NT_TERMS 5 110 110 111 111 psS32 testPlaneTransformAlloc( void ) … … 170 170 { 171 171 // Invoke function with known parameters 172 psPlaneDistort *myPD = psPlaneDistortAlloc(N W_TERMS, NX_TERMS, NY_TERMS, NZ_TERMS);172 psPlaneDistort *myPD = psPlaneDistortAlloc(NX_TERMS, NY_TERMS, NZ_TERMS, NT_TERMS); 173 173 174 174 // Verify NULL is not returned … … 178 178 } 179 179 // Verify the terms are properly set after allocation 180 if (myPD->x->nW != NW_TERMS) {181 psError(PS_ERR_UNKNOWN,true,"myPD->x->nW is %d, should be %d",182 myPD->x->nW, NW_TERMS);183 return 2;184 }185 if (myPD->y->nW != NW_TERMS) {186 psError(PS_ERR_UNKNOWN,true,"myPD->y->nW is %d, should be %d",187 myPD->y->nW, NW_TERMS);188 return 3;189 }190 180 if (myPD->x->nX != NX_TERMS) { 191 181 psError(PS_ERR_UNKNOWN,true,"myPD->x->nX is %d, should be %d", 192 182 myPD->x->nX, NX_TERMS); 193 return 4;183 return 2; 194 184 } 195 185 if (myPD->y->nX != NX_TERMS) { 196 186 psError(PS_ERR_UNKNOWN,true,"myPD->y->nX is %d, should be %d", 197 187 myPD->y->nX, NX_TERMS); 198 return 5;188 return 3; 199 189 } 200 190 if (myPD->x->nY != NY_TERMS) { 201 191 psError(PS_ERR_UNKNOWN,true,"myPD->x->nY is %d, should be %d", 202 192 myPD->x->nY, NY_TERMS); 203 return 6;193 return 4; 204 194 } 205 195 if (myPD->y->nY != NY_TERMS) { 206 196 psError(PS_ERR_UNKNOWN,true,"myPD->y->nY is %d, should be %d", 207 197 myPD->y->nY, NY_TERMS); 208 return 7;198 return 5; 209 199 } 210 200 if (myPD->x->nZ != NZ_TERMS) { 211 201 psError(PS_ERR_UNKNOWN,true,"myPD->x->nZ is %d, should be %d", 212 202 myPD->x->nZ, NZ_TERMS); 213 return 8;203 return 6; 214 204 } 215 205 if (myPD->y->nZ != NZ_TERMS) { 216 206 psError(PS_ERR_UNKNOWN,true,"myPD->y->nZ is %d, should be %d", 217 207 myPD->y->nZ, NZ_TERMS); 208 return 7; 209 } 210 if (myPD->x->nT != NT_TERMS) { 211 psError(PS_ERR_UNKNOWN,true,"myPD->x->nT is %d, should be %d", 212 myPD->x->nT, NT_TERMS); 213 return 8; 214 } 215 if (myPD->y->nT != NT_TERMS) { 216 psError(PS_ERR_UNKNOWN,true,"myPD->y->nT is %d, should be %d", 217 myPD->y->nT, NT_TERMS); 218 218 return 9; 219 219 } -
trunk/psLib/test/dataManip/tst_psFunc00.c
r3682 r4422 14 14 * orders are created. 15 15 * 16 * @version $Revision: 1.2 1$ $Name: not supported by cvs2svn $17 * @date $Date: 2005-0 4-07 20:27:41$16 * @version $Revision: 1.22 $ $Name: not supported by cvs2svn $ 17 * @date $Date: 2005-06-29 00:43:46 $ 18 18 * 19 19 * Copyright 2004-2005 Maui High Performance Computing Center, Univ. of Hawaii … … 466 466 } 467 467 // Verify polynomial structure members set properly 468 if(my4DPoly->n X!= ORDER) {469 psError(PS_ERR_UNKNOWN,true,"Number of terms %d not as expected %d", 470 my4DPoly->n X, ORDER);471 return 2; 472 } 473 // Verify polynomial structure members set properly 474 if(my4DPoly->n Y!= ORDER+1) {475 psError(PS_ERR_UNKNOWN,true,"Number of terms %d not as expected %d", 476 my4DPoly->n Y, ORDER+1);477 return 3; 478 } 479 // Verify polynomial structure members set properly 480 if(my4DPoly->n Z!= ORDER+2) {481 psError(PS_ERR_UNKNOWN,true,"Number of terms %d not as expected %d", 482 my4DPoly->n Z, ORDER+2);468 if(my4DPoly->nY != ORDER) { 469 psError(PS_ERR_UNKNOWN,true,"Number of terms %d not as expected %d", 470 my4DPoly->nY, ORDER); 471 return 2; 472 } 473 // Verify polynomial structure members set properly 474 if(my4DPoly->nZ != ORDER+1) { 475 psError(PS_ERR_UNKNOWN,true,"Number of terms %d not as expected %d", 476 my4DPoly->nZ, ORDER+1); 477 return 3; 478 } 479 // Verify polynomial structure members set properly 480 if(my4DPoly->nT != ORDER+2) { 481 psError(PS_ERR_UNKNOWN,true,"Number of terms %d not as expected %d", 482 my4DPoly->nT, ORDER+2); 483 483 return 4; 484 484 } 485 485 // Verify polynomial structure members set properly 486 if(my4DPoly->n W!= ORDER+3) {487 psError(PS_ERR_UNKNOWN,true,"Number of terms %d not as expected %d", 488 my4DPoly->n W, ORDER+3);486 if(my4DPoly->nX != ORDER+3) { 487 psError(PS_ERR_UNKNOWN,true,"Number of terms %d not as expected %d", 488 my4DPoly->nX, ORDER+3); 489 489 return 5; 490 490 } … … 560 560 } 561 561 // Verify polynomial structure members set properly 562 if(my4DDPoly->n X!= ORDER) {563 psError(PS_ERR_UNKNOWN,true,"Number of terms %d not as expected %d", 564 my4DDPoly->n X, ORDER);565 return 2; 566 } 567 // Verify polynomial structure members set properly 568 if(my4DDPoly->n Y!= ORDER+1) {569 psError(PS_ERR_UNKNOWN,true,"Number of terms %d not as expected %d", 570 my4DDPoly->n Y, ORDER+1);571 return 3; 572 } 573 // Verify polynomial structure members set properly 574 if(my4DDPoly->n Z!= ORDER+2) {575 psError(PS_ERR_UNKNOWN,true,"Number of terms %d not as expected %d", 576 my4DDPoly->n Z, ORDER+2);562 if(my4DDPoly->nY != ORDER) { 563 psError(PS_ERR_UNKNOWN,true,"Number of terms %d not as expected %d", 564 my4DDPoly->nY, ORDER); 565 return 2; 566 } 567 // Verify polynomial structure members set properly 568 if(my4DDPoly->nZ != ORDER+1) { 569 psError(PS_ERR_UNKNOWN,true,"Number of terms %d not as expected %d", 570 my4DDPoly->nZ, ORDER+1); 571 return 3; 572 } 573 // Verify polynomial structure members set properly 574 if(my4DDPoly->nT != ORDER+2) { 575 psError(PS_ERR_UNKNOWN,true,"Number of terms %d not as expected %d", 576 my4DDPoly->nT, ORDER+2); 577 577 return 4; 578 578 } 579 579 // Verify polynomial structure members set properly 580 if(my4DDPoly->n W!= ORDER+3) {581 psError(PS_ERR_UNKNOWN,true,"Number of terms %d not as expected %d", 582 my4DDPoly->n W, ORDER+3);580 if(my4DDPoly->nX != ORDER+3) { 581 psError(PS_ERR_UNKNOWN,true,"Number of terms %d not as expected %d", 582 my4DDPoly->nX, ORDER+3); 583 583 return 5; 584 584 } -
trunk/psLib/test/dataManip/verified/tst_psFunc00.stderr
r3769 r4422 59 59 Following should generate error msg for negative terms 60 60 <DATE><TIME>|<HOST>|E|psPolynomial4DAlloc (FILE:LINENO) 61 Error: nW is 0 or less.62 <DATE><TIME>|<HOST>|I|testPolynomial4DAlloc63 Following should generate error msg for negative terms64 <DATE><TIME>|<HOST>|E|psPolynomial4DAlloc (FILE:LINENO)65 61 Error: nX is 0 or less. 66 62 <DATE><TIME>|<HOST>|I|testPolynomial4DAlloc … … 72 68 <DATE><TIME>|<HOST>|E|psPolynomial4DAlloc (FILE:LINENO) 73 69 Error: nZ is 0 or less. 70 <DATE><TIME>|<HOST>|I|testPolynomial4DAlloc 71 Following should generate error msg for negative terms 72 <DATE><TIME>|<HOST>|E|psPolynomial4DAlloc (FILE:LINENO) 73 Error: nT is 0 or less. 74 74 75 75 ---> TESTPOINT PASSED (psPolynomialXD{psPolynomial4DAlloc} | tst_psFunc00.c) … … 135 135 Following should generate error msg for negative terms 136 136 <DATE><TIME>|<HOST>|E|psDPolynomial4DAlloc (FILE:LINENO) 137 Error: nW is 0 or less.138 <DATE><TIME>|<HOST>|I|testDPolynomial4DAlloc139 Following should generate error msg for negative terms140 <DATE><TIME>|<HOST>|E|psDPolynomial4DAlloc (FILE:LINENO)141 137 Error: nX is 0 or less. 142 138 <DATE><TIME>|<HOST>|I|testDPolynomial4DAlloc … … 148 144 <DATE><TIME>|<HOST>|E|psDPolynomial4DAlloc (FILE:LINENO) 149 145 Error: nZ is 0 or less. 146 <DATE><TIME>|<HOST>|I|testDPolynomial4DAlloc 147 Following should generate error msg for negative terms 148 <DATE><TIME>|<HOST>|E|psDPolynomial4DAlloc (FILE:LINENO) 149 Error: nT is 0 or less. 150 150 151 151 ---> TESTPOINT PASSED (psPolynomialXD{psDPolynomial4DAlloc} | tst_psFunc00.c) -
trunk/psLib/test/dataManip/verified/tst_psFunc08.stderr
r4405 r4422 55 55 Following should generate an error message for NULL polynomial 56 56 <DATE><TIME>|<HOST>|E|psDPolynomial1DEvalVector (FILE:LINENO) 57 Unallowable operation: polynomial myPoly or its coeffs is NULL.57 Unallowable operation: polynomial poly or its coeffs is NULL. 58 58 <DATE><TIME>|<HOST>|I|testDPoly1DEvalVector 59 59 Following should generate an error message for NULL input vector -
trunk/psLib/test/dataManip/verified/tst_psFunc09.stderr
r4405 r4422 63 63 Following should generate an error message for NULL polynomial 64 64 <DATE><TIME>|<HOST>|E|psDPolynomial2DEvalVector (FILE:LINENO) 65 Unallowable operation: polynomial myPoly or its coeffs is NULL.65 Unallowable operation: polynomial poly or its coeffs is NULL. 66 66 <DATE><TIME>|<HOST>|I|testDPoly2DEvalVector 67 67 Following should generate an error message for NULL input vector -
trunk/psLib/test/dataManip/verified/tst_psFunc10.stderr
r4405 r4422 71 71 Following should generate an error message for NULL polynomial 72 72 <DATE><TIME>|<HOST>|E|psDPolynomial3DEvalVector (FILE:LINENO) 73 Unallowable operation: polynomial myPoly or its coeffs is NULL.73 Unallowable operation: polynomial poly or its coeffs is NULL. 74 74 <DATE><TIME>|<HOST>|I|testDPoly3DEvalVector 75 75 Following should generate an error message for NULL input vector -
trunk/psLib/test/dataManip/verified/tst_psFunc11.stderr
r4405 r4422 79 79 Following should generate an error message for NULL polynomial 80 80 <DATE><TIME>|<HOST>|E|psDPolynomial4DEvalVector (FILE:LINENO) 81 Unallowable operation: polynomial myPoly or its coeffs is NULL. 82 <DATE><TIME>|<HOST>|I|testDPoly4DEvalVector 83 Following should generate an error message for NULL input vector 84 <DATE><TIME>|<HOST>|E|psDPolynomial4DEvalVector (FILE:LINENO) 85 Unallowable operation: psVector w or its data is NULL. 81 Unallowable operation: polynomial poly or its coeffs is NULL. 86 82 <DATE><TIME>|<HOST>|I|testDPoly4DEvalVector 87 83 Following should generate an error message for NULL input vector … … 97 93 Unallowable operation: psVector z or its data is NULL. 98 94 <DATE><TIME>|<HOST>|I|testDPoly4DEvalVector 99 Following should generate an error message for invalid input type95 Following should generate an error message for NULL input vector 100 96 <DATE><TIME>|<HOST>|E|psDPolynomial4DEvalVector (FILE:LINENO) 101 Unallowable operation: psVector x has incorrect type.97 Unallowable operation: psVector t or its data is NULL. 102 98 <DATE><TIME>|<HOST>|I|testDPoly4DEvalVector 103 99 Following should generate an error message for invalid input type … … 111 107 Following should generate an error message for invalid input type 112 108 <DATE><TIME>|<HOST>|E|psDPolynomial4DEvalVector (FILE:LINENO) 113 Unallowable operation: psVector w has incorrect type. 109 Unallowable operation: psVector t has incorrect type. 110 <DATE><TIME>|<HOST>|I|testDPoly4DEvalVector 111 Following should generate an error message for invalid input type 112 <DATE><TIME>|<HOST>|E|psDPolynomial4DEvalVector (FILE:LINENO) 113 Unallowable operation: psVector x has incorrect type. 114 114 115 115 ---> TESTPOINT PASSED (psPolynomialXDEval{psDPolynomial4DEvalVector} | tst_psFunc11.c)
Note:
See TracChangeset
for help on using the changeset viewer.
