Bezier Curve FirstOrder Continuity Bezier Curve FirstOrder Continuity
Bezier Curve와 First-Order Continuity Bezier Curve를 사용할 때 First-Order Continuity를 어떻게 만족 시킬 수 있나를 알아 보기 위하여 아래의 Cubic Bezier Curver의 식을 u에 대하여 미분 하면 p(u) = P 0 (1 -u)3 + P 1 3 u (1 -u)2 + p 2 3 u 2(1 -u) + p 3 u 3 d p(u) du 미분 = -3 P 0 (1 -u) 2 + 3 P 1 [(1 -u)2 - 2 u(1 -u)] + -3 p 2 [u 2 - 2 u(1 -u) ] + 3 p 3 u 2 P 0 (1 -u)3 P 0 [3 (1 -u)2 (-1) ] = P 0 [-3(1 -u)2] = -3 P 0 (1 -u) 2 P 1 3 u (1 -u)2 3 P 1 [(1 -u)2 + u. 2(1 -u). (-1) ] = 3 P 1 [(1 -u)2 - 2 u(1 -u)] p 2 3 u 2(1 -u) 3 p 2 [2 u(1 -u) + u 2 (-1)] = 3 p 2 [2 u(1 -u) - u 2 ] = -3 p 2 [u 2 - 2 u(1 -u) ] p 3 u 3 p 3 [3 u 2 ] = 3 p 3 u 2 계속 2차원 곡선 9
get_2 d_bezier_curve()함수 소스 (2 d-bez. c 파일 내) void get_2 d_bezier_curve(float *cx, float *cy, float *x, float *y, int n) { int i; float u, du, cu, Bez 03, Bez 13, Bez 23, Bez 33; u=0. 0; du = 1. 0 / (float)(n-1); for(i=0; i<n; i++) { cu = 1. 0 - u; Bez 03 = cu * cu; Bez 13 = 3. 0 * u * cu; Bez 23 = 3. 0 * u * cu; Bez 33 = u * u; x[i] = cx[0] * Bez 03 + cx[1] * Bez 13 + cx[2] * Bez 23 + cx[3] * Bez 33; y[i] = cy[0] * Bez 03 + cy[1] * Bez 13 + cy[2] * Bez 23 + cy[3] * Bez 33; u += du; }/*i*/ } 2차원 곡선 12
draw_2 d_bezier_curve()함수 소스 (2 d-bez. c 파일 내) int draw_2 d_bezier_curve(float *cx, float *cy, int n, float r, float g, float b) { float *x, *y; x = malloc(sizeof(float) * n); y = malloc(sizeof(float) * n); if(!x) return 0; if(!y) { free(x); return 0; } get_2 d_bezier_curve(cx, cy, x, y, n); draw_polygon(x, y, n, r, g, b); free(x); free(y); return 1; } 2차원 곡선 13
- Slides: 13