IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
May 20, 2004, 3:04:45 PM (22 years ago)
Author:
gusciora
Message:

...

File:
1 edited

Legend:

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

    r737 r750  
    2424psGaussian(float x,
    2525           float mean,
    26            float stddev)
    27 {
    28     return(exp(-((x-mean) * (x-mean)) / (2.0 * stddev * stddev)));
     26           float stddev,
     27           int normal)
     28{
     29    float tmp = 0.0;
     30
     31    if (nomal == true) {
     32        tmp = 1.0 / sqrtf(2.0 * PI * (stddev * stddev));
     33        return(tmp * exp(-((x-mean) * (x-mean)) / (2.0 * stddev * stddev)));
     34    } else {
     35        return(exp(-((x-mean) * (x-mean)) / (2.0 * stddev * stddev)));
     36    }
     37}
     38
     39psVector *psGaussianDev(float mean,
     40                        float sigma,
     41                        int Npts)
     42{
     43    psVector *gauss = NULL;
     44
     45    gauss = psVectorAlloc(Npts, PS_TYPE_FLOAT);
    2946}
    3047
     
    204221
    205222/*****************************************************************************
    206     Polynomial coefficients will be accessed in (x,y,z) fashion.
     223    Polynomial coefficients will be accessed in [w][x][y][z] fashion.
    207224 *****************************************************************************/
    208225float
     
    212229    int loop_x = 0;
    213230    float polySum = 0.0;
     231    float xSum = 1.0;
    214232
    215233    for (loop_x=0;loop_x<myPoly->n;loop_x++) {
    216         polySum+= x + myPoly->coeff[loop_x];
     234        polySum+= xSum * myPoly->coeff[loop_x];
     235        xSum*=x;
    217236    }
    218237
     
    229248    int loop_y = 0;
    230249    float polySum = 0.0;
     250    float xSum = 1.0;
     251    float ySum = 1.0;
    231252
    232253    for (loop_x=0;loop_x<myPoly->nX;loop_x++) {
     254        xSum = xSum;
    233255        for (loop_y=0;loop_y<myPoly->nY;loop_y++) {
    234             polySum+= x + myPoly->coeff[loop_x][loop_y];
    235         }
     256            polySum+= ySum * myPoly->coeff[loop_x][loop_y];
     257            ySum*=y;
     258        }
     259        xSum*=x;
    236260    }
    237261
     
    249273    int loop_z = 0;
    250274    float polySum = 0.0;
     275    float xSum = 1.0;
     276    float ySum = 1.0;
     277    float zSum = 1.0;
    251278
    252279    for (loop_x=0;loop_x<myPoly->nX;loop_x++) {
     280        ySum = xSum;
    253281        for (loop_y=0;loop_y<myPoly->nY;loop_y++) {
     282            zSum = ySum;
    254283            for (loop_z=0;loop_z<myPoly->nZ;loop_z++) {
    255                 polySum+= x + myPoly->coeff[loop_x][loop_y][loop_z];
    256             }
    257         }
     284                polySum+= zSum * myPoly->coeff[loop_x][loop_y][loop_z];
     285                zSum*=z;
     286            }
     287            ySum*=y;
     288        }
     289        xSum*=x;
    258290    }
    259291
     
    273305    int loop_z = 0;
    274306    float polySum = 0.0;
     307    float wSum = 1.0;
     308    float xSum = 1.0;
     309    float ySum = 1.0;
     310    float zSum = 1.0;
    275311
    276312    for (loop_w=0;loop_w<myPoly->nW;loop_w++) {
     313        xSum = wSum;
    277314        for (loop_x=0;loop_x<myPoly->nX;loop_x++) {
     315            ySum = xSum;
    278316            for (loop_y=0;loop_y<myPoly->nY;loop_y++) {
     317                zSum = ySum;
    279318                for (loop_z=0;loop_z<myPoly->nZ;loop_z++) {
    280                     polySum+= x + myPoly->coeff[loop_w][loop_x][loop_y][loop_z];
     319                    polySum+= zSum *
     320                              myPoly->coeff[loop_w][loop_x][loop_y][loop_z];
     321                    zSum*=z;
    281322                }
    282             }
    283         }
     323                ySum*=y;
     324            }
     325            xSum*=x;
     326        }
     327        wSum*=w;
    284328    }
    285329
     
    461505}
    462506
     507/*****************************************************************************
     508    Polynomial coefficients will be accessed in [w][x][y][z] fashion.
     509 *****************************************************************************/
    463510double
    464 psevalDPolynomial1D(double x,
    465                     const psPolynomial1D *myPoly)
     511psDEvalPolynomial1D(double x,
     512                    const psDPolynomial1D *myPoly)
    466513{
    467514    int loop_x = 0;
    468515    double polySum = 0.0;
     516    double xSum = 1.0;
    469517
    470518    for (loop_x=0;loop_x<myPoly->n;loop_x++) {
    471         polySum+= x + myPoly->coeff[loop_x];
     519        polySum+= xSum * myPoly->coeff[loop_x];
     520        xSum*=x;
    472521    }
    473522
     
    477526
    478527double
    479 psevalDPolynomial2D(double x,
     528psDEvalPolynomial2D(double x,
    480529                    double y,
    481                     const psPolynomial2D *myPoly)
     530                    const psDPolynomial2D *myPoly)
    482531{
    483532    int loop_x = 0;
    484533    int loop_y = 0;
    485534    double polySum = 0.0;
     535    double xSum = 1.0;
     536    double ySum = 1.0;
    486537
    487538    for (loop_x=0;loop_x<myPoly->nX;loop_x++) {
     539        xSum = xSum;
    488540        for (loop_y=0;loop_y<myPoly->nY;loop_y++) {
    489             polySum+= x + myPoly->coeff[loop_x][loop_y];
    490         }
     541            polySum+= ySum * myPoly->coeff[loop_x][loop_y];
     542            ySum*=y;
     543        }
     544        xSum*=x;
    491545    }
    492546
     
    495549
    496550double
    497 psevalDPolynomial3D(double x,
     551psDEvalPolynomial3D(double x,
    498552                    double y,
    499553                    double z,
    500                     const psPolynomial3D *myPoly)
     554                    const psDPolynomial3D *myPoly)
    501555{
    502556    int loop_x = 0;
     
    504558    int loop_z = 0;
    505559    double polySum = 0.0;
     560    double xSum = 1.0;
     561    double ySum = 1.0;
     562    double zSum = 1.0;
    506563
    507564    for (loop_x=0;loop_x<myPoly->nX;loop_x++) {
     565        ySum = xSum;
    508566        for (loop_y=0;loop_y<myPoly->nY;loop_y++) {
     567            zSum = ySum;
    509568            for (loop_z=0;loop_z<myPoly->nZ;loop_z++) {
    510                 polySum+= x + myPoly->coeff[loop_x][loop_y][loop_z];
    511             }
    512         }
     569                polySum+= zSum * myPoly->coeff[loop_x][loop_y][loop_z];
     570                zSum*=z;
     571            }
     572            ySum*=y;
     573        }
     574        xSum*=x;
    513575    }
    514576
     
    517579
    518580double
    519 psevalDPolynomial4D(double w,
     581psDEvalPolynomial4D(double w,
    520582                    double x,
    521583                    double y,
    522584                    double z,
    523                     const psPolynomial4D *myPoly)
     585                    const psDPolynomial4D *myPoly)
    524586{
    525587    int loop_w = 0;
     
    528590    int loop_z = 0;
    529591    double polySum = 0.0;
     592    double wSum = 1.0;
     593    double xSum = 1.0;
     594    double ySum = 1.0;
     595    double zSum = 1.0;
    530596
    531597    for (loop_w=0;loop_w<myPoly->nW;loop_w++) {
     598        xSum = wSum;
    532599        for (loop_x=0;loop_x<myPoly->nX;loop_x++) {
     600            ySum = xSum;
    533601            for (loop_y=0;loop_y<myPoly->nY;loop_y++) {
     602                zSum = ySum;
    534603                for (loop_z=0;loop_z<myPoly->nZ;loop_z++) {
    535                     polySum+= x + myPoly->coeff[loop_w][loop_x][loop_y][loop_z];
     604                    polySum+= zSum *
     605                              myPoly->coeff[loop_w][loop_x][loop_y][loop_z];
     606                    zSum*=z;
    536607                }
    537             }
    538         }
    539     }
    540 
    541     return(polySum);
    542 }
     608                ySum*=y;
     609            }
     610            xSum*=x;
     611        }
     612        wSum*=w;
     613    }
     614
     615    return(polySum);
     616}
Note: See TracChangeset for help on using the changeset viewer.