Changeset 2808 in Sophya for trunk/SophyaLib/NTools/cspline.cc
- Timestamp:
- Jun 14, 2005, 1:25:05 PM (20 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/SophyaLib/NTools/cspline.cc
r2615 r2808 14 14 #include "cspline.h" 15 15 16 //++ 17 // Class CSpline 18 // Lib Outils++ 19 // include cspline.h 20 // 21 // Classe de spline 1D 22 //-- 23 24 //++ 25 // Titre Constructeurs 26 //-- 27 28 ////////////////////////////////////////////////////////////////////////////// 29 //++ 16 /*! 17 \class SOPHYA::CSpline 18 \ingroup NTools 19 Spline 3 smoother (interpolator) for 1-D data points (y = f(x)) 20 \sa CSpline2 21 */ 22 23 /*! 24 Createur pour spline 3 sur "x[0->n],y[0->n]" avec "yp1,ypn" derivees 25 au premier et dernier points et "natural" indiquant les types de 26 contraintes sur les derivees 2sd au premier et dernier point. 27 "order" doit etre mis a "true" si le tableau de "x[]" n'est pas ordonne 28 dans l'ordre des "x" croissants ("x[i]<x[i+1]"): cette option 29 realloue la place pour les tableaux "x,y" autrement seule une 30 connection aux tableaux "x,y" externes est realisee. 31 */ 30 32 CSpline::CSpline(int n,double* x,double* y,double yp1,double ypn 31 33 ,int natural,bool order) 32 //33 // Createur pour spline 3 sur "x[0->n],y[0->n]" avec "yp1,ypn" derivees34 // au premier et dernier points et "natural" indiquant les types de35 // contraintes sur les derivees 2sd au premier et dernier point.36 // "order" doit etre mis a "true" si le tableau de "x[]" n'est pas ordonne37 // dans l'ordre des "x" croissants ("x[i]<x[i+1]"): cette option38 // realloue la place pour les tableaux "x,y" autrement seule une39 // connection aux tableaux "x,y" externes est realisee.40 //--41 34 : Nel(0), corrupt_Y2(true), XY_Created(false), Natural(natural) 42 35 , YP1(yp1), YPn(ypn), X(NULL), Y(NULL), Y2(NULL), tmp(NULL) … … 47 40 } 48 41 49 ////////////////////////////////////////////////////////////////////////////// 50 //++ 42 //! Createur par defaut. 51 43 CSpline::CSpline(double yp1,double ypn,int natural) 52 //53 // Createur par defaut.54 //--55 44 : Nel(0), corrupt_Y2(true), XY_Created(false), Natural(natural) 56 45 , YP1(yp1), YPn(ypn), X(NULL), Y(NULL), Y2(NULL), tmp(NULL) … … 59 48 60 49 ////////////////////////////////////////////////////////////////////////////// 50 //! destructeur 61 51 CSpline::~CSpline() 62 // destructeur63 52 { 64 53 DelTab(); 65 54 } 66 55 67 //++ 68 // Titre Methodes 69 //-- 70 71 ////////////////////////////////////////////////////////////////////////////// 72 //++ 56 /*! 57 Pour changer les tableaux sans recreer la classe, 58 memes arguments que dans le createur. 59 Pour connecter les tableaux "x[n],y[n]" aux pointeurs internes "X,Y" 60 Si "order=true", on considere que x n'est pas range par ordre 61 des "x" croissants. La methode alloue de la place pour des tableaux 62 internes "X,Y" qu'elle re-ordonne par "x" croissant. 63 "force=true" impose la reallocation des divers buffers, sinon 64 la reallocation n'a lieu que si le nombre de points augmente. 65 */ 73 66 void CSpline::SetNewTab(int n,double* x,double* y,bool order,bool force) 74 //75 // Pour changer les tableaux sans recreer la classe,76 // memes arguments que dans le createur.77 // Pour connecter les tableaux "x[n],y[n]" aux pointeurs internes "X,Y"78 // Si "order=true", on considere que x n'est pas range par ordre79 // des "x" croissants. La methode alloue de la place pour des tableaux80 // internes "X,Y" qu'elle re-ordonne par "x" croissant.81 // "force=true" impose la reallocation des divers buffers, sinon82 // la reallocation n'a lieu que si le nombre de points augmente.83 //--84 67 { 85 68 ASSERT( n>3 ); … … 132 115 133 116 ////////////////////////////////////////////////////////////////////////////// 117 //! destruction des divers tableaux en tenant compte des allocations/connections 134 118 void CSpline::DelTab() 135 // destruction des divers tableaux en tenant compte des allocations/connections136 119 { 137 120 if( X != NULL && XY_Created ) delete [] X; X = NULL; … … 142 125 143 126 ////////////////////////////////////////////////////////////////////////////// 144 //++ 127 /*! 128 Pour changer les valeurs des derivees 1ere au 1er et dernier points 129 Valeurs imposees des derivees 1ere au points "X[0]" et "X[Nel-1]". 130 */ 145 131 void CSpline::SetBound1er(double yp1,double ypn) 146 //147 // Pour changer les valeurs des derivees 1ere au 1er et dernier points148 // Valeurs imposees des derivees 1ere au points "X[0]" et "X[Nel-1]".149 //--150 132 { 151 133 if( yp1 == YP1 && ypn == YPn ) return; … … 157 139 } 158 140 159 ////////////////////////////////////////////////////////////////////////////// 160 //++ 141 //! Pour calculer les tableaux de coeff permettant le calcul des interpolations spline. 161 142 void CSpline::ComputeCSpline() 162 //163 // Pour calculer les tableaux de coeff permettant le calcul164 // des interpolations spline.165 //--166 143 { 167 144 // on ne fait rien si les tableaux ne sont pas connectes … … 206 183 } 207 184 208 ////////////////////////////////////////////////////////////////////////////// 209 //++ 185 //! Interpolation spline en \b x 210 186 double CSpline::CSplineInt(double x) 211 //212 // Interpolation spline en "x"213 //--214 187 { 215 188 int klo,khi,k; … … 243 216 } 244 217 245 /////////////////////////////////////////////////////////////// 246 ///////// rappel des inlines pour commentaires //////////////// 247 /////////////////////////////////////////////////////////////// 248 249 //++ 250 // inline void SetNaturalCSpline(int type = NaturalAll) 251 // Pour changer le type de contraintes sur les derivees 2sd 252 //-- 253 //++ 254 // inline void Free_Tmp() 255 // Pour liberer la place tampon qui ne sert que 256 // dans ComputeCSpline() et pas dans CSplineInt 257 //-- 258 259 ////////////////////////////////////////////////////////////////////////////// 260 ////////////////////////////////////////////////////////////////////////////// 261 262 //++ 263 // Class CSpline2 264 // Lib Outils++ 265 // include cspline.h 266 // 267 // Classe de spline 2D 268 //-- 269 270 //++ 271 // Titre Constructeurs 272 //-- 273 274 ////////////////////////////////////////////////////////////////////////////// 275 //++ 218 219 ////////////////////////////////////////////////////////////////////////////// 220 ////////////////////////////////////////////////////////////////////////////// 221 222 /*! 223 \class SOPHYA::CSpline2 224 \ingroup NTools 225 Spline smoother (interpolator) for 2-D data points (y = f(x1,x2)) 226 \sa CSpline 227 */ 228 229 /*! 230 Contructeur - Meme commentaire que pour CSpline avec: 231 \verbatim 232 x1[n1]: liste des coordonnees selon l axe 1 233 x2[n2]: liste des coordonnees selon l axe 2 234 y[n1*n2]: liste des valeurs avec le rangement suivant 235 x1[0]......x1[n1-1] x1[0]......x1[n1-1] ... x1[0]......x1[n1-1] 236 | 0<=i<n1 | | 0<=i<n1 | ... | 0<=i<n1 | 237 | j=0 X2[0] j=1 X2[1] j=n2-1 X2[n2-1] 238 \endverbatim 239 */ 276 240 CSpline2::CSpline2(int n1,double* x1,int n2,double* x2,double* y 277 241 ,int natural,bool order) 278 //279 // Meme commentaire que pour CSpline avec:280 //| x1[n1]: liste des coordonnees selon l axe 1281 //| x2[n2]: liste des coordonnees selon l axe 2282 //| y[n1*n2]: liste des valeurs avec le rangement suivant283 //| x1[0]......x1[n1-1] x1[0]......x1[n1-1] ... x1[0]......x1[n1-1]284 //| | 0<=i<n1 | | 0<=i<n1 | ... | 0<=i<n1 |285 //| j=0 X2[0] j=1 X2[1] j=n2-1 X2[n2-1]286 //--287 242 : Nel1(0), Nel2(0), corrupt_Y2(true), XY_Created(false), Natural(natural) 288 243 , X1(NULL), X2(NULL), Y(NULL), Y2(NULL) … … 294 249 } 295 250 296 ////////////////////////////////////////////////////////////////////////////// 297 //++ 251 //! Createur par defaut. 298 252 CSpline2::CSpline2(int natural) 299 //300 // Createur par defaut.301 //--302 253 : Nel1(0), Nel2(0), corrupt_Y2(true), XY_Created(false), Natural(natural) 303 254 , X1(NULL), X2(NULL), Y(NULL), Y2(NULL) … … 312 263 } 313 264 314 //++ 315 // Titre Methodes 316 //-- 317 318 ////////////////////////////////////////////////////////////////////////////// 319 //++ 265 ////////////////////////////////////////////////////////////////////////////// 266 //! Voir commentaire meme methode de CSpline 320 267 void CSpline2::SetNewTab(int n1,double* x1,int n2,double* x2,double* y 321 268 ,bool order,bool force) 322 //323 // Voir commentaire meme methode de CSpline324 //--325 269 { 326 270 ASSERT( n1>3 && n2>3 ); … … 430 374 431 375 ////////////////////////////////////////////////////////////////////////////// 432 // ++376 //! Voir commentaire meme methode de CSpline 433 377 void CSpline2::ComputeCSpline() 434 //435 // Voir commentaire meme methode de CSpline436 //--437 378 { 438 379 // on ne fait rien si X1 ou X2 ou Y non connectes … … 454 395 455 396 ////////////////////////////////////////////////////////////////////////////// 456 // ++397 //! Calcule la valeur interpole (spline) pour le point \b (x1,x2) 457 398 double CSpline2::CSplineInt(double x1,double x2) 458 //459 // Voir commentaire meme methode de CSpline460 //--461 399 { 462 400 // calcul de la valeur Y pour x=x1 et remplissage du tampon tmp … … 471 409 } 472 410 473 ///////////////////////////////////////////////////////////////474 ///////// rappel des inlines pour commenatires ////////////////475 ///////////////////////////////////////////////////////////////476 477 //++478 // inline void SetNaturalCSpline(int type = NaturalAll)479 // Voir commentaire meme methode de CSpline480 //--
Note:
See TracChangeset
for help on using the changeset viewer.