2009-07-06 5 views
13

catmull-rom 스플라인에 대한 가장 자세한 정보가있는이 사이트에서 : http://www.mvps.org/directx/articles/catmull/ 그것은 스플라인을 작성하기 위해 4 점이 필요하다는 언급을합니다. 그러나 점 p0과 점 p3이 점 p1과 점 p2 사이의 값에 어떻게 영향을 미치는지는 언급하지 않습니다.Catmull-Rom 스플라인 - 어떻게 작동합니까?

또 다른 질문은 어떻게 연속 스플라인을 만드시겠습니까? 우리가 p0, p1, p2, p3, p4, p5, p6 ... pN을 가졌다 고 가정 할 때 p4, p5를 p4, p5와 연속으로 정의하는 것만 큼 쉽습니다.

좀 더 일반적인 질문은 catmull ROM 스플라인에서 접선을 계산하는 방법입니다. 스플라인에 두 점 (0.01, 0.011)을 사용하고 피타고라스를 기준으로 접선을 얻는 것이 포함되어야합니까?

+0

정상 Catmull의-ROM이 또한 문제가 될 수있는 루프와 자기 교차점하는 경향이 식의 미분을 어느 시점에서의 탄젠트를 계산한다. 여기에 표시된 구심력 매개 변수화를 사용하는 것이 좋습니다. http://stackoverflow.com/questions/9489736/catmull-rom-curve-with-no-cusps-and-no-self-intersections/19283471#19283471 – Ted

답변

8

방정식 2를 살펴보십시오. 제어 포인트가 라인에 어떤 영향을 주는지 설명합니다. P1에서 P2까지 곡선을 따라 점을 그리는 방정식에 점 P0P3이 표시되는 것을 볼 수 있습니다. 또한 t == 0P2 일 때 일 때 방정식이 P1임을 알 수 있습니다.

이 예제 방정식은 일반화 될 수 있습니다. 이 점 R0, R1이있는 경우, ... RN는 당신은 P0 = RK - 1, P1 = RK, P2 = RK + 1P3 = RK + 2과 식 (2)를 사용하여 RKRK + 1 사이의 포인트를 플롯 할 수 있습니다.

당신이 R - 1RN + 1에 대한에 서 별도의 제어 포인트를 추가하지 않는 한 당신은 R0에서 R1 또는 RNRN - 1에서 플롯 할 수 없습니다. 일반적인 생각은 시퀀스의 머리와 꼬리에 추가 할 점을 선택하여 스플라인을 계산하는 데 필요한 모든 매개 변수를 제공 할 수 있다는 것입니다.

제어점 중 하나를 놓아서 두 개의 스플라인을 결합 할 수 있습니다.당신은 그들이 R0, R1, ..., RN - 1, S1, S2, ... SM에 가입 할 수 R0, R1, ..., RNS0, S1, ... SM을 말해봐.

단지 2

6

Wikipedia article은 조금 더 깊이 들어가 있습니다. 스플라인의 일반적인 형태는 연관된 접선 벡터가있는 제어점 2 개를 입력으로 사용합니다. 공통 제어점의 접선 벡터가 동일하면 C1 스플라인 세그먼트를 추가하여 C1 연속성을 유지할 수 있습니다.

특정 Catmull-Rom 형식에서 중간 점의 접선 벡터는 인접한 제어점의 위치에 의해 결정됩니다. 따라서 여러 점을 통해 C1 연속 스플라인을 작성하려면 첫 번째 및 마지막 제어점에 제어점 세트와 접선 벡터를 공급하면 충분합니다. 표준 동작은 P0의 접선 벡터와 PN의 PN-PN-1에 대해 P1 - P0을 사용하는 것입니다.

T(n) = (P(n - 1) + P(n + 1))/2 

이것은 또한 첫 번째 질문에 대한 답 : 위키 백과의 기사에 따르면

는, 제어 포인트 PN에서 탄젠트를 계산하기 위해,이 방정식을 사용합니다. 4 개의 제어점 세트 P1, P2, P3, P4의 경우 P2와 P3 사이의 보간 값에는 4 개의 모든 제어점 정보가 필요합니다. P2 및 P3 자체는 보간 세그먼트가 통과해야하는 끝점을 정의합니다. P1과 P3은 보간 세그먼트가 점 P2에서 가질 접선 벡터를 결정합니다. P4 및 P2는 세그먼트가 점 P3에서 가질 접선 벡터를 결정합니다. 제어점 P2 및 P3의 접선 벡터는 그 사이의 보간 세그먼트 모양에 영향을줍니다.

+1

죄송합니다. 내가 뭔가를 놓치고 있지만, 그 공식에 기사의 어느 부분을 지적 할 수 있습니까? http://en.wikipedia.org/wiki/Cubic_Hermite_spline#Catmull.E2.80.93Rom_spline에서 다른 것을 볼 수 있습니다. (저는 수학에 능숙하지 않습니다. 방금 수식을 얻는 방법을 알고 싶었습니다.) –