Сплайны Catmull-Rom - как они работают?

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

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

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

3 ответа

Решение

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

Этот пример уравнения может быть обобщен. Если у вас есть очки R0, R1RN тогда вы можете построить точки между 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, S1SM они могут быть объединены в R0, R1..., RN - 1, S1, S2SM,

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

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

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

Согласно статье в Википедии, для вычисления тангенса в контрольной точке 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 влияют на форму интерполирующего сегмента между ними.

Этот pdf может помочь вам лучше понять. да, для расчета касательной они включают предыдущую и следующую точки на основе функции натяжения.

Он тоже имеет происхождение.

https://www.cs.cmu.edu/~fp/courses/graphics/asst5/catmullRom.pdf

Другие вопросы по тегам