//---------------------------------------------------------------------------- // EgalTech 2020-2020 //---------------------------------------------------------------------------- // File : deCasteljau.h Data : 29.03.20 Versione : 2.2c3 // Contenuto : Applicazioni dell'algoritmo di de Casteljau. // // // // Modifiche : 29.03.20 DS Creazione modulo. // // //---------------------------------------------------------------------------- #pragma once //--------------------------- Include ---------------------------------------- #include "/EgtDev/Include/EGkGeoCollection.h" //---------------------------------------------------------------------------- inline bool deCastTrimStart( double dPar, int nDeg, PNTVECTOR& vPtCtrl) { if ( dPar < EPS_PARAM) return true ; if ( dPar > 1 - EPS_PARAM) return false ; for ( int k = 1 ; k <= nDeg ; ++ k) { for ( int i = 0 ; i <= nDeg - k ; ++ i) { vPtCtrl[i] = ( 1 - dPar) * vPtCtrl[i] + dPar * vPtCtrl[i+1] ; } } return true ; } //---------------------------------------------------------------------------- inline bool deCastRatTrimStart( double dPar, int nDeg, PNTVECTOR& vPtCtrl, DBLVECTOR& vWeCtrl) { if ( dPar < EPS_PARAM) return true ; if ( dPar > 1 - EPS_PARAM) return false ; for ( int k = 1 ; k <= nDeg ; ++ k) { for ( int i = 0 ; i <= nDeg - k ; ++ i) { vPtCtrl[i] = ( 1 - dPar) * vWeCtrl[i] * vPtCtrl[i] + dPar * vWeCtrl[i+1] * vPtCtrl[i+1] ; vWeCtrl[i] = ( 1 - dPar) * vWeCtrl[i] + dPar * vWeCtrl[i+1] ; vPtCtrl[i] = vPtCtrl[i] * ( 1 / vWeCtrl[i]) ; } } return true ; } //---------------------------------------------------------------------------- inline bool deCastTrimEnd( double dPar, int nDeg, PNTVECTOR& vPtCtrl) { if ( dPar < EPS_PARAM) return false ; if ( dPar > 1 - EPS_PARAM) return true ; for ( int k = 1 ; k <= nDeg ; ++ k) { for ( int i = nDeg ; i >= k ; -- i) { vPtCtrl[i] = ( 1 - dPar) * vPtCtrl[i-1] + dPar * vPtCtrl[ i] ; } } return true ; } //---------------------------------------------------------------------------- inline bool deCastRatTrimEnd( double dPar, int nDeg, PNTVECTOR& vPtCtrl, DBLVECTOR& vWeCtrl) { if ( dPar < EPS_PARAM) return false ; if ( dPar > 1 - EPS_PARAM) return true ; for ( int k = 1 ; k <= nDeg ; ++ k) { for ( int i = nDeg ; i >= k ; -- i) { vPtCtrl[i] = ( 1 - dPar) * vWeCtrl[i-1] * vPtCtrl[i-1] + dPar * vWeCtrl[ i] * vPtCtrl[ i] ; vWeCtrl[i] = ( 1 - dPar) * vWeCtrl[i-1] + dPar * vWeCtrl[ i] ; vPtCtrl[i] = vPtCtrl[i] * ( 1 / vWeCtrl[i]) ; } } return true ; }