주의 : 오류가 있을 수도 있습니다. 이상하면 참고 자료들을 참조하세요.


Motive.


일반적으로 검기같은 것을 구현하거나 path 를 만들 때 매개변수화된 커브( parameterized curve )를 사용한다. 독자들은 여러 가지 종류의 커브에 대해 들어 보거나 구현한 적이 있을 것이다. 아티스트에게 툴을 사용해서 커브를 구성하라고 할 때 가장 직관적인 형태로 편집할 수 있는 것은 Catmull-Rom spline 이다. Catmull-Rom spline 으로 구글링을 해 보니 어떤 분이 Catmull-Rom spline 에 대해서 잘 정리하셨다. 혹시 Catmull-Rom spline 이 무엇인지 모른다면 다음 링크를 참조하라.


http://blog.naver.com/PostView.nhn?blogId=sorkelf&logNo=40154552485


Catmull-Rom spline 도 그렇고 다른 커브들도 그렇지만 매개변수화된 커브들은 [ 0, 1 ] 의 시간 사이에서 보간되어 최종 위치를 계산하게 된다. 그런데 이 커브들의 동작을 살펴 보면 제어 점의 거리가 멀면 긴 커브를 생성하는데, 제어점을 지나는 시간은 동일하다. 예를 들어 두 개의 구간( segment )을 가진다고 하면 각 구간을 지나가는 시간은 동일하다.


예를 들어 커브를 매개변수 t 에 대해서 매개변수화했고, t 가 1.0 일 때 1초가 지나도록 설정했다고 하자. 그러면 아래 그림과 같이 두 개의 구간으로 이루어진 Catmull-Rom spline 을 지나가는 데는 2초가 걸린다( 물론 아래 그림은 대충 그린 것이기 때문에 실제의 모양과는 차이가 있다 ).

여기에서 두 가지 질문을 던질 수 있다.

  • 0.4 초까지 진행했을 때 얼마의 거리를 이동했을까?
  • 두 구간을 지나가는데 동일한 속도로 이동하게 하려면 어떻게 해야 할까?

이 두 가지 문제를 풀기 위해서 공통적으로 필요한 것이 호의 길이( arc length )를 구하는 것이다.


Arc Length.


커브에서 arc length 라는 것은 곡선을 직선으로 폈을 때의 길이를 의미한다. 즉 커브를 따라 움직였을 때의 거리라고 할 수 있다. 3차원에서의 커브는 vectorized function 이라고 할 수 있으며, 이 커브의 arc length 를 구하기 위한 방법은 아래 링크에 나와 있다.


Arc Length And Curvature.



식을 보면 엄청나게 복잡해 보인다. 위의 식은 다음과 같이 풀어 볼 수 있다.

  • 매개변수화된 커브의 x, y, z 성분을 시간 t 에 대해 미분한다.
  • 각 미분결과를 제곱한 다음에 더하고 그 제곱근을 구한다.
  • a 와 b 구간에서 그 제곱근들을 적분한다.

손발이 마구 오그라드는 것을 느낄 수 있을 것이다.


하지만 개념을 이해하면 매우 단순한 알고리즘이다. 일단 2차원에서 생각하는 것이 편하기 때문에 2차원에서 설명하도록 하겠다. 

아래 그림과 같은 커브가 있다고 하자. 커브의 어떤 구간에서 dx 만큼 이동할 때의 변화량은 dy 이다. 우리가 알고 있는 미분이 바로 아래 그림과 같다.

그런데 문제는 우리가 매개변수화된 커브, 즉 vectorized function 을 가지고 있다는 것이다. 그러면 이 vectorized function 을 미분한다는 의미는 무엇일까? 시간축 개념을 도입해 보도록 하자.


이제 질문에 답을 할 수가 있다. dt 만큼의 시간이 지났을 때 각 성분별로 dx, dy 만큼의 변화량을 가지고 있다고 표현할 수 있다. 이제 이야기가 좀 쉬워진다. 그러면 저 위의 빨간 선의 거리는 어떻게 구하는가?



매우 단순한 2 차원 상에서 거리 구하기 문제이다. 그렇다면 3 차원 상에서도 마찬가지로 확장해 볼 수 있다.



자 이제 "아주 짧은 시간" t 만큼 이동한 거리를 구했으니, [ a, b ] 구간에서 이를 모두 더하면 호의 길이를 구할 수 있다. 이게 바로 적분식으로 표현되어 있다. 이제 다시 식을 살펴 보자. 쉽게 이해가 갈 것이다.



어렵게 생긴 표현식들도 의미를 곰곰히 따져 보면 쉽게 이해할 수 있다. 어떤 시간에 이동한 거리를 구하는 것과 일정한 속도로 이동하는 것은 각 구간의 arc length 를 구한 다음에 적절한 연산을 수행하면 구할 수 있다. 이는 독자의 상상에 맡기도록 하겠다.


식의 마지막에 v(t) 라는 것이 나와 있다. 이는 속도( velocity )를 의미한다. 단위 시간당 각 축에 대한 변화량은 단위 시간당 속도라는 의미와 같다. 즉 우리는 속도를 알고 있을 때 그것을 적분하면 이동 거리를 알 수 있다고 생각할 수 있다.

+ Recent posts