2009-07-06 3 views
13

С этого сайта, который, как представляется, имеет самую подробную информацию о сплайнах catmull-rom: http://www.mvps.org/directx/articles/catmull/, он упоминает о необходимости четырех точек для создания сплайна. Однако он не упоминает, как точки p0 и p3 влияют на значения между p1 и p2.сплайны Catmull-Rom - как они работают?

Другой вопрос, который у меня есть, - как бы вы создали непрерывные сплайны? Было бы так же просто, как определить, что точки p1, p2 должны быть непрерывными с p4, p5, сделав p4 = p2 (то есть предположим, что мы имеем p0, p1, p2, p3, p4, p5, p6 ... pN).

Более общий вопрос заключается в том, как можно вычислить тангенсы на осколочных сплайнах? Должно ли это включать в себя взятие двух точек на сплайне (скажем, 0,01, 0,011) и получение касательной на основе пифагоров с учетом координат положения, которые дают эти входные значения?

+0

Нормальной Катмулла-ROM также склонна к петлям и самопересечению, которые могут быть проблемой. Я настоятельно рекомендую использовать центростремительную параметризацию, показанную здесь: http://stackoverflow.com/questions/9489736/catmull-rom-curve-with-no-cusps-and-no-self-intersections/19283471#19283471 – Ted

ответ

8

Взгляните на уравнение 2 - оно описывает, как контрольные точки влияют на линию. Вы можете увидеть точки P0 и P3 перейти в уравнение для построения точек вдоль кривой от P1 до P2. Вы также увидите, что уравнение дает P1, когда t == 0 и P2, когда t == 1.

Это примерное уравнение может быть обобщено. Если у вас есть очки R0, R1 ... RN, то вы можете построить точки между RK и RK + 1 с использованием уравнения 2 с P0 = RK - 1, P1 = RK, P2 = RK + 1 и P3 = RK + 2.

Вы не можете построить из R0 в R1 или RN - 1 к RN, если не добавить дополнительные контрольные точки, чтобы стоять за R - 1 и RN + 1. Общая идея заключается в том, что вы можете выбрать любые точки, которые хотите добавить в голову и хвост последовательности, чтобы дать себе все параметры для вычисления сплайна.

Вы можете объединить два сплайна вместе, сбросив одну из контрольных точек между ними.Скажем, у вас есть R0, R1, ..., RN и S0, S1, ... SM они могут быть объединены в R0, R1, ..., RN - 1, S1, S2, ... SM.

Для вычисления касательной в любой точке просто взять производную уравнения 2.

6

Wikipedia article глубже углубляется. Общий вид сплайна принимает в качестве входных 2 контрольных точек с соответствующими касательными векторами. Затем могут быть добавлены дополнительные сегменты сплайнов при условии, что касательные векторы в общих контрольных точках равны, что сохраняет непрерывность C1.

В конкретной форме Catmull-Rom касательный вектор в промежуточных точках определяется местоположением соседних контрольных точек. Таким образом, для создания непрерывного сплайна C1 через несколько точек достаточно обеспечить набор контрольных точек и касательных векторов в первой и последней контрольной точке. Я считаю, что стандартное поведение заключается в использовании P1-P0 для касательного вектора в P0 и PN-PN-1 при PN.

Согласно статье Википедии, вычислить тангенс в контрольной точке Р, можно использовать это уравнение:

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

Это также отвечает на ваш первый вопрос. Для набора из 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. (Я не так хорош в математике. Мне просто хотелось узнать, как вы получили формулу.) – 2013-06-01 18:41:05