[CG] Bezier Curve

imacusirius·2021년 11월 18일
0

컴퓨터그래픽스

목록 보기
7/7

곡선을 어떻게 표현할 수 있을까?

2차원 공간에 존재하는 곡선이라면 점 x와 y로, 3차원상의 곡선이라면 점 x, y, z로 표현할 수 있다. 곡선은 시간에 따라 그려지는 궤적으로도 볼 수 있다. 곡선의 시작점에서 시간을 t=0이라고 하고, 끝점에서의 시간을 t=1이라고 한다면 좌표는 (x(t), y(t))로 표현할 수 있을 것이다.

시간의 경과에 따른 점의 좌표를 c(t)라고 한다면

  • c(t) = (x(t), y(t))
  • c(t) = (x(t), y(t), z(t))

로 표현할 수 있다.

즉, 곡선 하나가 그려지는 시간을 0에서부터 1로 놓고, 시간을 일정하게 나누어 해당 시간에 대응하는 점을 찾아 그 점들을 이으면 곡선이 그려지는 것이다. 하지만 시간 간격을 너무 넓게 잡는다면 곡선이 곡선처럼 보이지 않고, 구부러진 직선처럼 보일 것이다.

곡선을 곡선처럼 보이게 하려면 어떻게 해야 할까? 곡선 위의 정점을 어떻게 찾을 수 있을까? Bezier curve, B-spline curve, NURBS curve 등이 답이 될 수 있다. 베지어 곡선을 제외한 나머지 두 곡선은 학부생 수준에서 다루기에 어려움이 있으므로, 베지어 곡선을 다루도록 하겠다.

P0으로부터 P1까지 이어진 선분이 있다고 하자. 그리고 그 선분 위의 점 C(t)가 있다. P0부터 C(t)까지 선분과 P0부터 P1까지 선분은 평행하다. 각각 선분을 v 벡터와 u 벡터로 놓고, 닮음 비를 이용하면 다음과 같이 정리할 수 있다.

(벡터) v = t · u
(벡터) P0C = t · P0P1
C(t) - P0 = t(P1 - P0)
C(t) = t(P1 - P0) + P0
C(t) = (1 - t)P0 + tP1

점을 두 개만 찍으면 1차원의 직선이 그려지고, 점을 3개 찍는다면 2차 곡선이 그려진다.

// 나중에...

0개의 댓글