Files
EgtGeomKernel/deCasteljau.h
T
Dario Sassi 2c6ebdadca EgtGeomKernel :
- correzioni, migliorie e d estensioni alle superfici di Bezier
- in Release cambiate opzioni di ottimizzazione da /Ox  a /O2.
2020-03-30 11:04:20 +00:00

86 lines
2.7 KiB
C

//----------------------------------------------------------------------------
// 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 ;
}