본문 바로가기

Graphics Note

Bezier curve

Interpolation method 중 베지어곡선은 스플라인과 조금 다르게 '핸들러' 라는 점으로 곡선을 표현한다. 일러스트레이터나 포토샵의 '펜툴', '패스툴' 이 베지어곡선을 활용한 것이다. 일반적으로 2차원상의 곡선으로 활용하고, 보다 높은차원에서 '베지어곡면'으로 곡면 또한 표현할 수 있다.

 

베지어곡선이라 베지어씨가 만든줄 알았는데 Paul de casteljau가 만들었다고 한다. 베지어로 인해서 유명해졌을 뿐이라고 한다.

 

핸들러의 갯수에 따라 n차 베지어곡선 이라 하고

[math!]\begin{equation}\begin{split}B(t) &= \sum_{k=0}^{n} \dbinom{n}{k}P_k (1-t)^{n-k}t^k \\ &= \dbinom{n}{0}P_0(1-t)^n + \dbinom{n}{1}P_1(1-t)^{n-1}t + \cdots + \dbinom{n}{n}P_nt^n, \\ & t \in [0,1] \end{split}\end{equation}[/math!]

와 같이 수식으로 표현된다.

 

하지만 도형을 표현하기위해 베지어를 사용할때는 3차 베지어 이상 사용할 필요가 없다. 1,2,3차 베지어곡선의 연속으로 원하는 도형을 충분히 표현할 수 있기때문이다. 오히려 높은차수의 베지어곡선을 사용하면 원하는 도형의 표현이 더 힘들다.

 

2D상의 베지어곡선을 한번 구현해 봤다. 일러의 펜툴을 모방했는데 핸들러를 개별로다루는 기능은 넣지않았다.

 

-두 지점을 오로지 클릭: 1차 베지어곡선

-한 지점은 클릭, 다른 한 지점은 클릭후(클릭한 채로) 드래그: 2차 베지어곡선

-두 지점 모두 클릭후(클릭한 채로) 드래그: 3차 베지어곡선

 

Bezier.h

 

example.cpp

 

 

아래그림은 테스트 결과. 

 

'Graphics Note' 카테고리의 다른 글

[Mathematics] rotation quaternion details  (0) 2014.03.28
device context and rendering context  (0) 2014.02.24
cube map upside-down  (0) 2014.01.22
Normal Matrix  (1) 2013.12.15
glHint  (0) 2013.12.14