Как работает центростремительный сплайн Катмулла – Рома?

StackOverflow https://stackoverflow.com/questions/1085617

Вопрос

От этот сайт, который вроде бы содержит самую подробную информацию о сплайнах Катмулла-Рома, похоже, что для создания сплайна необходимо четыре точки.Однако здесь не упоминается, как точки p0 и p3 влияют на значения между p1 и p2.

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

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

Это было полезно?

Решение

Взгляните на уравнение 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.

Другие советы

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

В конкретной форме Катмулла-Рома касательный вектор в промежуточных точках определяется местоположениями соседних контрольных точек.Таким образом, чтобы создать непрерывный сплайн 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 влияют на форму интерполяционного сегмента между ними.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top