2c6ebdadca
- correzioni, migliorie e d estensioni alle superfici di Bezier - in Release cambiate opzioni di ottimizzazione da /Ox a /O2.
53 lines
1.6 KiB
C
53 lines
1.6 KiB
C
//----------------------------------------------------------------------------
|
|
// EgalTech 2020-2020
|
|
//----------------------------------------------------------------------------
|
|
// File : Bernstein.h Data : 22.03.20 Versione : 2.2c2
|
|
// Contenuto : Implementazione delle funzioni sui polinomi di Bernstein.
|
|
//
|
|
//
|
|
//
|
|
// Modifiche : 22.03.20 DS Creazione modulo.
|
|
//
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
#pragma once
|
|
|
|
//--------------------------- Include ----------------------------------------
|
|
#include "/EgtDev/Include/EgtNumCollection.h"
|
|
|
|
//----------------------------------------------------------------------------
|
|
inline bool
|
|
GetAllBernstein( double dU, int nDeg, DBLVECTOR& vBern)
|
|
{
|
|
if ( nDeg >= int( vBern.size()))
|
|
return false ;
|
|
vBern[0] = 1 ;
|
|
for ( int i = 1 ; i <= nDeg ; ++ i) {
|
|
double dTot = 0 ;
|
|
for ( int j = 0 ; j < i ; ++ j) {
|
|
double dTmp = vBern[j] ;
|
|
vBern[j] = dTot + ( 1 - dU) * dTmp ;
|
|
dTot = dU * dTmp ;
|
|
}
|
|
vBern[i] = dTot ;
|
|
}
|
|
return true ;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
inline bool
|
|
IncreaseAllBernsteinOneDegree( double dU, int nDeg, DBLVECTOR& vBern)
|
|
{
|
|
if ( nDeg >= int( vBern.size()))
|
|
return false ;
|
|
double dTot = 0 ;
|
|
for ( int j = 0 ; j < nDeg ; ++ j) {
|
|
double dTmp = vBern[j] ;
|
|
vBern[j] = dTot + ( 1 - dU) * dTmp ;
|
|
dTot = dU * dTmp ;
|
|
}
|
|
vBern[nDeg] = ( nDeg > 0 ? dTot : 1) ;
|
|
return true ;
|
|
}
|