평면 위의 유한한 곡선은 무엇일까? 정확하게 말하면 f:[0,1]→R2 인 함수겠지만 매번 함수를 통해 말하기에는 피곤하다. 그래서 무수히 많은 곡선 중에 적당히 포기하고 몇개만 골라서 간단하게 표현하는 방법을 Paul de Casteljau란 사람이 만들었다고 한다. 그런데 우리는 이 곡선을 Bézier curve라고 부른다.
베지어 곡선은 몇개의 점으로 곡선을 표현한다.
1차 베지어 곡선
P0,P1가 평면 위의 점일 때 두 점을 잇는 직선은
f(t)=P0+t(P1−P0),t∈[0,1]
이다. f(0)=P0이고 f(1)=P1인 것을 알 수 있다. 그리고 t가 0에서 1로 가면서 f(t)는 P0에서 P1로 이동한다.
위의 식을 다르게 써보자:
BP0,P1(1)(t)=(1−t)P0+tP1,t∈[0,1]−(1)
이때 위쪽 (n)은 n차 베지어 곡선이라는 말. 그런데 한 점에 가만히 있는 것도 하나의 곡선으로 볼 수 있다:
그럼 4차, 5차 곡선은? 아... 너무 귀찮다. 위의 식을 보다보면 계수가 어디선가 많이 본 거같다. 사실
BP0,...,Pn(n)(t)=i=0∑n(in)(1−t)n−itiPi
이다. (in)는 binomial coefficient 또는 combination 또는 nCi이다. 증명은 귀납법을 사용하면 되겠지만 여백이 너무 좁다. 심심하면 참고
어디에 쓸까?
Bézier씨는 자동차를 설계하는 데 사용했다고 한다. 우리는 CSS에서 transition을 설정할 때 timing function으로 사용할 수 있다:
파라미터들은 무엇일까? 타이밍 함수를 x축이 시간이고 y축이 위치인 함수로 이해할 수 있다. 어차피 여기서 저기까지 가는 방법을 기술하는 것이기 때문에 P0=(0,0),P3=(1,1)로 고정할 수 있다. 이제 필요한 파라미터는 P1과 P2의 x, y 좌표. 순서대로 P0의 x, y좌표, P1의 x, y좌표이다.
사실 ease, linear, ease-in 같은 것들도 다 특정한 2차 베지어 곡선의 별명이다.
반면 css에서 cubic-bezier()의 한계는 무엇일까? 3차 베지어 곡선은 3차 함수(wrt. t)이기 때문에 "왔다갔다"할 수 있지만 "왔다갔다왔다갔다" 이상은 할 수 없다.