Catmull-Rom 스플라인의 호 길이를 결정하여 일정한 속도로 이동


18

Catmull-Rom 스플라인의 연결로 정의 된 경로가 있습니다. XNA에서 정적 메소드 Vector2.CatmullRom을 사용하여 0에서 1 사이의 값을 가진 점 사이의 보간을 허용합니다.

이 경로의 모든 스플라인의 길이가 동일한 것은 아닙니다. 경로를 따라 진행하는 동안 모든 스플라인에 대해 가중치를 일정 속도로 놓으면 속도 차이가 발생합니다. 무게의 속도가 스플라인의 길이에 의존하게하여이를 해결할 수 있습니다. 이러한 스플라인의 길이를 어떻게 확인할 수 있습니까? 스플라인을 10 개의 직선으로 자르고 길이를 합하여 근사해야합니까?

스플라인으로 정의 된 생성 된 메쉬에서 동적 텍스처 매핑을 위해 이것을 사용하고 있습니다.

답변:


25

물체의 속도를 전체 곡선에서 일정한 값으로 유지하려는 것처럼 들립니다. 호 길이를 알면 도움이되지 않습니다. 객체가 해당 속도로 진행중인 경우 종말점에 도달하는 시간을 계산하는 데 도움이 되므로 현재 상태보다 낫습니다 (객체는 모든 포인트간에 동일한 평균 속도를 가짐). 물체의 실제 속도는 곡선 주위를 이동할 때 여전히 변합니다.

더 나은 솔루션은 우리의 파라 메트릭 매개 변수를 변경하는 것 (0 ~ 내가 전화 할게 1, 간다 매개 변수 s와 회피 혼란 t = time) 가변 속도 ds/dt는 물체가 움직이고 싶은 일정 속도 무엇에 의해 결정된다, 커브상의 점. 다시 말해, s각 프레임 당 0.01 씩 변경 하는 대신 한 프레임 당 0.005, 다음 프레임에서 0.02 씩 변경할 수 있습니다.

각 프레임 의 x( dx/ds) 및 y( dy/ds) 의 미분 값을 계산 한 다음 설정하여

ds / dt = 속도 / sqrt ((dx / ds) 2 + (dy / ds) 2 )

즉, 우리가 가고자하는 속도를 가져 와서 s고정 된 증분 으로 변경하면 실제로 가고있는 속도로 나눕니다 .


증명

우리는 물체의 속도가 일정하기를 원합니다. 그 상수에 이름을 부여합시다 speed.

우리는 2 학년 수학이, 파라 메트릭 방정식에서 학습 x(s)y(s),

속도 = sqrt ((dx / dt) 2 + (dy / dt) 2 )

우리는 또한

dx / dt = dx / ds * ds / dt     (체인 규칙)

그러므로,

속도 = sqrt ((dx / ds) 2 (ds / dt) 2 + (dy / ds) 2 (ds / dt) 2 )

를 풀면 ds/dt명시된 방정식이 나온다.


파생 상품 계산

나는 그 특정 스플라인 함께 일한 적이 있지만, 나는 그들이 그냥주고 이해 x(s)y(s)의 입방 방정식의 관점에서 s. 따라서 파생 상품을 dx/ds쉽게 찾을 수 있습니다.

x (s) = a * s 3 + b * s 2 + c * s + e

그때

dx / ds = 3a * s 2 + 2b * s + c

(동일에 대한 dy/ds) 물론, 당신의 정확한 값을 알아야합니다 a, b그리고 c이 작업을 수행 할 수 있습니다. 이 페이지 에 따르면 이러한 값을 쉽게 찾을 수 있습니다.


마지막으로, 제목의 질문에 답하기 위해 : 파라 메트릭 함수의 호-길이 방정식을 찾는 것은 상당히 복잡한 명확한 적분을 푸는 것입니다 . 입방 방정식의 간단한 경우에도 일반적으로 수행 할 수 없습니다.

따라서, 정수추정 해야합니다 . "10 개 직선으로 스플라인 절단과 길이를 합산" 당신이 제안대로 것은 이 일을 한 아주 간단한 방법은 ; 그러나 더 적은 수의 라인 세그먼트를 사용하여 훨씬 정확한 결과를 제공하는 약간 더 복잡한 방법 이 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.