IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 10598


Ignore:
Timestamp:
Dec 9, 2006, 4:19:56 AM (20 years ago)
Author:
magnier
Message:

adding psPolynomial2DRecycle, psPolynomial2DCopy, psPolynomial2D_dX, psPolynomial2D_dY

Location:
trunk/psLib/src/math
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/psLib/src/math/psPolynomial.c

    r9730 r10598  
    77*  polynomials.  It also contains a Gaussian functions.
    88*
    9 *  @version $Revision: 1.152 $ $Name: not supported by cvs2svn $
    10 *  @date $Date: 2006-10-24 22:52:56 $
     9*  @version $Revision: 1.153 $ $Name: not supported by cvs2svn $
     10*  @date $Date: 2006-12-09 14:19:56 $
    1111*
    1212*  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
     
    636636
    637637    return(newPoly);
     638}
     639
     640// XXX add 1D, 3D, 4D versions
     641bool 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
     688psPolynomial2D *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);
    638705}
    639706
  • trunk/psLib/src/math/psPolynomial.h

    r9730 r10598  
    1111 *  @author GLG, MHPCC
    1212 *
    13  *  @version $Revision: 1.64 $ $Name: not supported by cvs2svn $
    14  *  @date $Date: 2006-10-24 22:52:56 $
     13 *  @version $Revision: 1.65 $ $Name: not supported by cvs2svn $
     14 *  @date $Date: 2006-12-09 14:19:56 $
    1515 *
    1616 *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
     
    149149    unsigned int nT                    ///< Number of terms in t
    150150);
     151
     152bool psPolynomial2DRecycle(psPolynomial2D *poly,
     153                           psPolynomialType type,
     154                           unsigned int nX,
     155                           unsigned int nY);
     156
     157psPolynomial2D *psPolynomial2DCopy(psPolynomial2D *out,
     158                                   psPolynomial2D *poly);
    151159
    152160/** Evaluates a 1-D polynomial at specific coordinates.
  • trunk/psLib/src/math/psPolynomialUtils.c

    r10593 r10598  
    178178}
    179179
    180 # if (0)
    181     psPolynomial2D *psPolynomial2D_dX (psPolynomial2D *poly)
    182 {
    183 
     180psPolynomial2D *psPolynomial2D_dX (psPolynomial2D *out, psPolynomial2D *poly)
     181{
    184182    int nXout = poly->nX - 1;
    185183    int nYout = poly->nY;
    186184
    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
     200psPolynomial2D *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  
    3535psPlane psImageBicubeMin(const psPolynomial2D *poly // The polynomial
    3636                        );
     37psPolynomial2D *psPolynomial2D_dX (psPolynomial2D *out, psPolynomial2D *poly);
     38psPolynomial2D *psPolynomial2D_dY (psPolynomial2D *out, psPolynomial2D *poly);
    3739
    3840#endif /* PS_POLY_UTILS_H */
Note: See TracChangeset for help on using the changeset viewer.