베지어 곡선
더 많은 작업
베지어 곡선(Bézier Curve)은 몇 개의 제어점으로 모양을 정하고 번스타인 다항식으로 제어점을 혼합해 만드는 매개변수 곡선으로, 컴퓨터 그래픽스와 CAD 에서 자유 곡선을 표현하는 기본 수단이다.
1960년대 프랑스 자동차 회사의 차체 설계에서 나왔다. 시트로엥의 드 카스텔조(Paul de Casteljau)가 1959년 무렵 계산 알고리즘을 고안했고, 르노의 피에르 베지어(Pierre Bézier)가 1962년 무렵부터 이를 설계 시스템(UNISURF)에 쓰고 발표하면서 그의 이름이 붙었다.
곡선이 지나야 할 점을 모두 주는 보간(Interpolation) 방식과 달리, 베지어 곡선은 제어점이 곡선을 끌어당기는 근사(Approximation) 방식이다. 곡선은 처음과 마지막 제어점만 지나고, 중간 제어점은 곡선의 모양을 잡아 준다. 계산이 간단하고 조작이 직관적이어서 CAD, GIS 의 선형 객체 표현, 게임·애니메이션의 이동 경로, 글꼴(TrueType 은 2차, PostScript·OpenType CFF 는 3차), SVG 경로, CSS 의 cubic-bezier() 타이밍 함수에 쓰인다.
n+1 개의 제어점 P0, …, Pn 으로 만드는 n 차 베지어 곡선은 다음과 같다.
- B(t) = Σi=0n C(n, i) (1 − t)n−i ti Pi, 0 ≤ t ≤ 1
여기서 bi,n(t) = C(n, i)(1 − t)n−iti 를 번스타인 기저 다항식(Bernstein Basis Polynomial)이라 한다. 제어점이 n+1 개면 n 차 곡선이 된다.
| 차수 | 제어점 수 | 식 |
|---|---|---|
| 1차(직선) | 2 | B(t) = (1 − t)P0 + tP1 |
| 2차 | 3 | B(t) = (1 − t)2P0 + 2(1 − t)tP1 + t2P2 |
| 3차 | 4 | B(t) = (1 − t)3P0 + 3(1 − t)2tP1 + 3(1 − t)t2P2 + t3P3 |
그래픽스에서는 3차 베지어 곡선을 가장 많이 쓴다. 변곡점을 표현할 수 있는 가장 낮은 차수이고, 여러 개를 이어 붙여 복잡한 곡선을 만든다.
선형 보간을 되풀이해 곡선 위의 점을 구한다. 매개변수 t 를 정하고
- 이웃한 제어점 쌍 Pi, Pi+1 을 t : (1 − t) 로 내분한 점 Pi(1) = (1 − t)Pi + tPi+1 을 구한다(n 개).
- 얻은 점들에 같은 내분을 다시 적용한다(n−1 개).
- 점이 하나 남을 때까지 반복한다. 마지막 한 점 P0(n) 이 B(t) 다.
- t 를 0 에서 1 까지 조금씩 바꿔 가며 얻은 점들을 이으면 곡선이 된다.
3차 곡선에서 t = 0.5 이면 4개 → 3개 → 2개 → 1개 점 순으로 줄어든다. 덧셈과 곱셈만 쓰므로 수치적으로 안정하고, 중간에 생기는 점들이 곡선을 t 에서 두 개의 베지어 곡선으로 분할(Subdivision)하는 제어점이 된다. 분할을 반복해 곡선이 충분히 평평해지면 직선으로 그리는 방식이 렌더링에 쓰인다.
t 마다 기저 함수 값을 계산해 제어점의 가중합을 구한다. 3차 곡선은 행렬 형태 B(t) = [t3 t2 t 1]·MB·[P0 P1 P2 P3]T 로 쓰고, t 를 일정 간격으로 늘리는 전방 차분(Forward Differencing)으로 곱셈 없이 다음 점을 구해 빠르게 그린다.
| 특성 | 내용 |
|---|---|
| 끝점 보간 | 곡선은 첫 제어점 P0(t=0)과 마지막 제어점 Pn(t=1)을 반드시 지난다. 중간 제어점은 일반적으로 지나지 않는다 |
| 끝점 접선 | 시작점의 접선은 P0→P1, 끝점의 접선은 Pn−1→Pn 방향이다. 미분하면 B′(0) = n(P1 − P0) |
| 볼록 껍질 성질 | 곡선 전체가 제어점들의 볼록 껍질 안에 있다. 기저 함수가 0 이상이고 합이 1(단위 분할)이기 때문이다. 충돌 검사·클리핑에 쓴다 |
| 아핀 불변성 | 곡선에 아핀 변환(이동·회전·확대)을 하려면 제어점만 변환하면 된다. 원근 투영에는 불변이 아니며, 이때는 유리 베지어 곡선을 쓴다 |
| 변동 감소 | 어떤 직선도 제어 다각형과 만나는 횟수보다 많이 곡선과 만나지 않는다. 곡선이 제어 다각형보다 덜 요동친다 |
| 대칭성 | 제어점 순서를 뒤집어도 같은 곡선이 나온다(진행 방향만 반대) |
| 전역 제어 | 제어점 하나를 움직이면 곡선 전체가 바뀐다. 국소 수정이 안 되는 것이 단점이다 |
| 차수와 제어점 수의 연동 | 제어점을 늘리면 차수가 올라가 계산이 늘고 모양 조절이 둔해진다. 그래서 3차 곡선을 이어 붙인다 |
여러 3차 베지어 곡선을 이을 때 앞 곡선의 P3 과 뒤 곡선의 P0 을 같게 하면 위치 연속(C0), 그 점 양쪽의 제어점이 한 직선 위에 있으면 접선 방향 연속(G1), 거리까지 같으면 1차 미분 연속(C1)이 된다. 드로잉 도구의 펜 도구가 접점 양쪽 핸들을 일직선으로 묶는 이유다.
| 구분 | 베지어 곡선 | B-스플라인 곡선 | NURBS |
|---|---|---|---|
| 제어 범위 | 전역 제어 | 국소 제어 — 제어점 하나가 일부 구간에만 영향 | 국소 제어 |
| 차수 | 제어점 수 − 1 로 고정 | 제어점 수와 독립적으로 지정 | 독립적으로 지정 |
| 끝점 | 반드시 지난다 | 일반적으로 지나지 않는다(열린 균일 매듭이면 지남) | 매듭에 따라 |
| 원·원뿔 곡선 | 정확히 표현 못 함 | 정확히 표현 못 함 | 가중치로 정확히 표현 |
| 쓰임 | 글꼴, 드로잉, 애니메이션 경로 | 모델링 | CAD 산업 표준(IGES, STEP) |