2011-04-30 96 views
0

我計算貝塞爾混合錯誤?任何幫助,將不勝感激。 非常感謝。混合函數/貝塞爾

double bezierBlend(int i, double u, int m) {  
    double blend = 1; 
    blend = factorial(m) * pow(u, i) * pow(1 - u, (m - i))/(factorial(i) * factorial(m - i)); 
    return blend; 
} 

回答

1

這裏的計算貝塞爾混合函數的樣品,直接從formulation以下:

double choose(long n, long k) 
{ 
    long j; 
    double a; 

    a = 1; 
    for (j = k + 1; j <= n; j++) 
     a *= j; 
    for (j = 1; j <= n - k; j++) 
     a /= j; 
    return a; 
}; 

double bezierBlend(int i, double t, int n) 
{ 
    return choose(n, i) * pow(1 - t, n - i) * pow(t, i); 
} 

對於雖然大多數應用中,計算所述功率和二項式係數每次是荒謬低效的。在典型應用中,曲線的程度是恆定的(例如,2代表二次方程或3代表三次方程),並且可以通過預擴展公式來更高效地計算函數。以下是三次曲線的示例:

double BezCoef(int i, double t) 
{ 
    double tmp = 1-t; 
    switch (i) 
    { 
    case 0: return tmp*tmp*tmp; 

    case 1: return 3*tmp*tmp*t; 

    case 2: return 3*tmp*t*t; 

    case 3: return t*t*t; 
    } 
    return 0; // not reached 
}