본문으로 이동
메뉴 여닫기
환경 설정 메뉴 여닫기
개인 메뉴 여닫기
로그인하지 않음
지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.

베지어 곡선(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 를 정하고

  1. 이웃한 제어점 쌍 Pi, Pi+1 을 t : (1 − t) 로 내분한 점 Pi(1) = (1 − t)Pi + tPi+1 을 구한다(n 개).
  2. 얻은 점들에 같은 내분을 다시 적용한다(n−1 개).
  3. 점이 하나 남을 때까지 반복한다. 마지막 한 점 P0(n) 이 B(t) 다.
  4. 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)