많은 스플라인의 종류 중에 하나인 큐빅 스플라인을 1차원의 보간에 적용하는 것에 대해 살펴보겠습니다. Catmull-Rom 스플라인을 구성하는 구분된 부드러운 곡선들을 나타내는 키 프레임 집합을 가지며 모든 키는 곡선 상에 위치합니다. 이 루틴을 사용하기 위해서 4개의 키 프레임 값이 필요합니다. 이 4개의 키 값을 v0, v1, v2, v3라고 하고, 여기에 보간을 위하여 v1에서 v2 사이의 지정된 0~1까지의 범위를 가지는 실수값 x가 존재합니다. 아래의 f(x)의 반환값은 x값에 의해 결정이 됩니다.
여기서 M은 다음처럼 정의됩니다.
아래의 이미지는 v1에서 v2 사이의 곡선의 한 예를 나타난 것입니다. 이 곡선은 위의 수식에서 x 값을 0에서 1.0 사이의 값을 이용해 얻을 수 있습니다.
아래의 코드는 위에서 설명한 내용을 C언어로 구현한 것입니다.
/* Coefficients for Matrix M */ #define M11 0.0 #define M12 1.0 #define M13 0.0 #define M14 0.0 #define M21 -0.5 #define M22 0.0 #define M23 0.5 #define M24 0.0 #define M31 1.0 #define M32 -2.5 #define M33 2.0 #define M34 -0.5 #define M41 -0.5 #define M42 1.5 #define M43 -1.5 #define M44 0.5 double catmullRomSpline(float x, float v0,float v1, float v2,float v3) { double c1,c2,c3,c4; c1 = M12*v1; c2 = M21*v0 + M23*v2; c3 = M31*v0 + M32*v1 + M33*v2 + M34*v3; c4 = M41*v0 + M42*v1 + M43*v2 + M44*v3; return(((c4*x + c3)*x +c2)*x + c1); }
이 글의 원문은 http://www.lighthouse3d.com/opengl/maths/index.php?catmullrom 입니다.