Changeset 10598
- Timestamp:
- Dec 9, 2006, 4:19:56 AM (20 years ago)
- Location:
- trunk/psLib/src/math
- Files:
-
- 4 edited
-
psPolynomial.c (modified) (2 diffs)
-
psPolynomial.h (modified) (2 diffs)
-
psPolynomialUtils.c (modified) (1 diff)
-
psPolynomialUtils.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psLib/src/math/psPolynomial.c
r9730 r10598 7 7 * polynomials. It also contains a Gaussian functions. 8 8 * 9 * @version $Revision: 1.15 2$ $Name: not supported by cvs2svn $10 * @date $Date: 2006-1 0-24 22:52:56 $9 * @version $Revision: 1.153 $ $Name: not supported by cvs2svn $ 10 * @date $Date: 2006-12-09 14:19:56 $ 11 11 * 12 12 * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii … … 636 636 637 637 return(newPoly); 638 } 639 640 // XXX add 1D, 3D, 4D versions 641 bool psPolynomial2DRecycle(psPolynomial2D *poly, 642 psPolynomialType type, 643 unsigned int nX, 644 unsigned int nY) 645 { 646 PS_ASSERT_INT_NONNEGATIVE(nX, NULL); 647 PS_ASSERT_INT_NONNEGATIVE(nY, NULL); 648 649 bool match = true; 650 match &= (poly->type == type); 651 match &= (poly->nX == type); 652 match &= (poly->nY == type); 653 654 if (!match) { 655 for (int i = 0; i < poly->nX + 1; i++) { 656 psFree (poly->coeff[i]); 657 psFree (poly->coeffErr[i]); 658 psFree (poly->mask[i]); 659 } 660 psFree (poly->coeff); 661 psFree (poly->coeffErr); 662 psFree (poly->mask); 663 664 poly->type = type; 665 poly->nX = nX; 666 poly->nY = nY; 667 668 poly->coeff = psAlloc((1 + nX) * sizeof(psF64 *)); 669 poly->coeffErr = psAlloc((1 + nX) * sizeof(psF64 *)); 670 poly->mask = (psMaskType **)psAlloc((1 + nX) * sizeof(psMaskType *)); 671 for (int i = 0; i < (1 + nX); i++) { 672 poly->coeff[i] = psAlloc((1 + nY) * sizeof(psF64)); 673 poly->coeffErr[i] = psAlloc((1 + nY) * sizeof(psF64)); 674 poly->mask[i] = (psMaskType *)psAlloc((1 + nY) * sizeof(psMaskType)); 675 } 676 } 677 for (int i = 0; i < (1 + nX); i++) { 678 for (int j = 0; j < (1 + nY); j++) { 679 poly->coeff[i][j] = 0.0; 680 poly->coeffErr[i][j] = 0.0; 681 poly->mask[i][j] = 0; 682 } 683 } 684 return(true); 685 } 686 687 // XXX add 1D, 3D, 4D versions 688 psPolynomial2D *psPolynomial2DCopy(psPolynomial2D *out, 689 psPolynomial2D *poly) 690 { 691 if (out == NULL) { 692 psPolynomial2DAlloc (poly->type, poly->nX, poly->nY); 693 } else { 694 psPolynomial2DRecycle (out, poly->type, poly->nX, poly->nY); 695 } 696 697 for (int i = 0; i < (1 + poly->nX); i++) { 698 for (int j = 0; j < (1 + poly->nY); j++) { 699 out->coeff[i][j] = poly->coeff[i][j] = 0.0; 700 out->coeffErr[i][j] = poly->coeffErr[i][j] = 0.0; 701 out->mask[i][j] = poly->mask[i][j] = 0; 702 } 703 } 704 return(out); 638 705 } 639 706 -
trunk/psLib/src/math/psPolynomial.h
r9730 r10598 11 11 * @author GLG, MHPCC 12 12 * 13 * @version $Revision: 1.6 4$ $Name: not supported by cvs2svn $14 * @date $Date: 2006-1 0-24 22:52:56 $13 * @version $Revision: 1.65 $ $Name: not supported by cvs2svn $ 14 * @date $Date: 2006-12-09 14:19:56 $ 15 15 * 16 16 * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii … … 149 149 unsigned int nT ///< Number of terms in t 150 150 ); 151 152 bool psPolynomial2DRecycle(psPolynomial2D *poly, 153 psPolynomialType type, 154 unsigned int nX, 155 unsigned int nY); 156 157 psPolynomial2D *psPolynomial2DCopy(psPolynomial2D *out, 158 psPolynomial2D *poly); 151 159 152 160 /** Evaluates a 1-D polynomial at specific coordinates. -
trunk/psLib/src/math/psPolynomialUtils.c
r10593 r10598 178 178 } 179 179 180 # if (0) 181 psPolynomial2D *psPolynomial2D_dX (psPolynomial2D *poly) 182 { 183 180 psPolynomial2D *psPolynomial2D_dX (psPolynomial2D *out, psPolynomial2D *poly) 181 { 184 182 int nXout = poly->nX - 1; 185 183 int nYout = poly->nY; 186 184 187 psPolynomial2D *dX = psPolynomial2DAlloc (PS_POLYNOMIAL_ORD, nXout, nYout); 188 189 for (int i = 0; i < nXout; i++) { 190 for (int j = 0; j < nYout; j++) { 191 dX->mask[i][j] = poly->mask[i+1][j]; 192 dX->coeff[i][j] = poly->coeff[i+1][j] * i+1; 193 } 194 } 195 } 196 197 psPolynomial2D *psPolynomial2D_dY (psPolynomial2D *poly) 198 { 199 200 int nXout = poly->nX; 201 int nYout = poly->nY - 1; 202 203 psPolynomial2D *dX = psPolynomial2DAlloc (PS_POLYNOMIAL_ORD, nXout, nYout); 204 205 for (int i = 0; i < nXout; i++) { 206 for (int j = 0; j < nYout; j++) { 207 dX->mask[i][j] = poly->mask[i+1][j]; 208 dX->coeff[i][j] = poly->coeff[i][j+1] * j+1; 209 } 210 } 211 } 212 #endif 185 if (out == NULL) { 186 out = psPolynomial2DAlloc (PS_POLYNOMIAL_ORD, nXout, nYout); 187 } else { 188 psPolynomial2DRecycle (out, poly->type, nXout, nYout); 189 } 190 191 for (int i = 0; i < nXout + 1; i++) { 192 for (int j = 0; j < nYout + 1; j++) { 193 out->mask[i][j] = poly->mask[i+1][j]; 194 out->coeff[i][j] = poly->coeff[i+1][j] * (i+1); 195 } 196 } 197 return out; 198 } 199 200 psPolynomial2D *psPolynomial2D_dY (psPolynomial2D *out, psPolynomial2D *poly) 201 { 202 203 int nXout = poly->nX - 1; 204 int nYout = poly->nY; 205 206 if (out == NULL) { 207 out = psPolynomial2DAlloc (PS_POLYNOMIAL_ORD, nXout, nYout); 208 } else { 209 psPolynomial2DRecycle (out, poly->type, nXout, nYout); 210 } 211 212 for (int i = 0; i < nXout + 1; i++) { 213 for (int j = 0; j < nYout + 1; j++) { 214 out->mask[i][j] = poly->mask[i][j+1]; 215 out->coeff[i][j] = poly->coeff[i][j+1] * (j+1); 216 } 217 } 218 return out; 219 } -
trunk/psLib/src/math/psPolynomialUtils.h
r7541 r10598 35 35 psPlane psImageBicubeMin(const psPolynomial2D *poly // The polynomial 36 36 ); 37 psPolynomial2D *psPolynomial2D_dX (psPolynomial2D *out, psPolynomial2D *poly); 38 psPolynomial2D *psPolynomial2D_dY (psPolynomial2D *out, psPolynomial2D *poly); 37 39 38 40 #endif /* PS_POLY_UTILS_H */
Note:
See TracChangeset
for help on using the changeset viewer.
