как найти касательную в момент времени t в натуральном кубическом сплайне

Я использовал алгоритм Тима Ламбера, чтобы нарисовать естественную сплайновую кубическую кривую.

Класс NatCubic

Класс NatCubic вычисляет коэффициенты кубиков (a b c d) массива точек.

a + b*u + c*u^2 + d*u^3 0<=u <1

и кубический класс вычисляют точки на кривой в момент времени t в [0-1].

b в кубическом классе — это производные в узлах i

Мой вопрос: как найти тангенс при t > 0 ‹ 1

Спасибо!

PS :

для уточнения моего вопроса я ищу касательную во время t, например, 0,5 с использованием предварительно вычисленных коэффициентов (abcd) каждой контрольной точки. Это делается для того, чтобы избежать вычисления точки (t + 1) для нахождения касательной, y (i + 1) - y (i-1)

извините за мой плохой английский.

на этой картинке видно, что я хочу сделать


person MacGile    schedule 02.04.2012    source источник
comment
Разве сэр Исаак Ньютон умер только для того, чтобы можно было задавать такие вопросы?   -  person Ignacio Vazquez-Abrams    schedule 02.04.2012
comment
t› 0 ‹1 ?? Возможно, Вы имели в виду: 0‹t‹1 ? Каждая точка дает вам вектор в 3D. Обычно нормаль к этому вектору дает вам касательную к этой точке. Если вам нужна касательная к поверхности, то любые две соседние точки дают вам вектор, который на самом деле является касательной к поверхности между этими двумя точками.   -  person Usman.3D    schedule 02.04.2012


Ответы (1)


Не знаю, хорошо ли я понял ваш вопрос.

(РЕДАКТИРОВАТЬ)

Наклон = b + 2c*u + 3d*u^2

тогда для использования tanget

(y - yo) = m * (x - x0)

где y0 — значение вашего сплайна в точке x0, а m — наклон в точке x0.

person user1012750    schedule 02.04.2012
comment
Это просто в корне неправильно. Тангенс - это линия, а не число. Вы, вероятно, имеете в виду Наклон касательной = ..., и в этом случае формула неверна. - person Alexandre C.; 02.04.2012
comment
Хорошо, да .... НО, когда у вас есть наклон, у вас есть тангет (я отредактирую свой пост) - person user1012750; 02.04.2012
comment
Производная u^3 — это НЕ u^2, а производная u^2 — это НЕ u. - person Alexandre C.; 02.04.2012
comment
чтобы уточнить мой вопрос, я ищу касательную в момент времени t, например, 0,5, используя предварительно вычисленные коэффициенты (abcd) каждой контрольной точки. Это делается для того, чтобы избежать вычисления точки (t +1) для нахождения касательной по, x (i +1) - x (i-1) - person MacGile; 02.04.2012
comment
У вас может быть только ваш наклон с предварительно вычисленными коэффициентами, как показано в моем ответе ... Вам нужно добавить смещение. Таким образом, касательная равна y = mx - mx0 + y0. Просто вычислите y0 с помощью вашей функции. - person user1012750; 02.04.2012
comment
Спасибо, я постараюсь сделать вам возврат :) - person MacGile; 02.04.2012
comment
@ user1012750: Хотя теперь ваш расчет наклона правильный, вы все еще упускаете одну важную вещь: то, что (y - y0)/(x - x0) = m, по сути, является производной. т.е. dy/dx данного сплайна Безье. То, что хочет ОП, - это просто нормализованные dy и dx, а не различия. То есть: dy/dx = m, если m > 1, пусть dy=1, поэтому 1/dx = m => dx = 1/m, если m ‹ 1, пусть dx = 1, dy = m. Последний шаг, нормализуйте вектор (dx,dy) до длины 1. - person datenwolf; 03.04.2012
comment
Как я понимаю, пользователь хочет просто вычислить тангенс. Таким образом, алгоритм в основном состоит из 2 шагов: 1- Рассчитать наклон. 2-Рассчитать смещение. Так же, как я объяснил - person user1012750; 03.04.2012
comment
вы можете видеть на этой картинке, что я хочу сделать gilles.macabies.perso.sfr. fr//tangent.jpg - person MacGile; 03.04.2012
comment
Я могу вам помочь, но мне нужно проверить ваш код... Глядя на вашу картинку, я не понимаю, как генерируются очки. Пример: как PT0 и PT4 генерируются вашей функцией? Что такое ввод? - person user1012750; 05.04.2012
comment
@macgile Вам нужно добавить код к своему вопросу, а не к этому ответу. - person Mark Hall; 12.04.2012