2011-04-30 3 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 차 곡선의 경우 2, 3 차의 경우 3). 수식을 미리 확장하여 훨씬 더 효율적으로 함수를 계산할 수 있습니다. 다음은 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 
}