Как интерполировать взвешенные сплайны Эрмита в Python

Я должен интерполировать взвешенные сплайны Эрмита, и мне трудно придумать формулу, которая правильно рассчитывает это с различными углами касания.

У кого-нибудь есть формула для вычисления весовых тангенсов в идеале без использования scipy или numpy? Или, возможно, ссылка на PDF, который объясняет математику, стоящую за этим? Заранее спасибо за любые советы.

Данные получены из анимационных кривых Autodesk Maya, с которыми необходимо работать за пределами Maya. И да, я работал с animEngine.c, который включен, но он не правильно вычисляет ключи с касательными, установленными в 'auto'

Вот некоторые примеры данных:

point:  0
time(x): 14
value(y): 8.535
inAngle:  -48.7059321223
inX:  0.583333313465
inY:  -15.9391937256
inWeight:  7.07152271271
outAngle:  -48.7059355374
outX:  0.33333337307
outY:  -9.10811233521
outWeight:  4.0408706665
point:  1
time(x): 22
value(y): -12.131
inAngle:  -26.318250542
inX:  0.33333337307
inY:  -3.95701789856
inWeight:  2.97504448891
outAngle:  -26.318250542
outX:  0.416666686535
outY:  -4.94627189636
outWeight:  3.71880531311
point:  2
time(x): 32
value(y): -0.369
inAngle:  -1.40329438149
inX:  0.416666686535
inY:  -0.244970053434
inWeight:  3.3343334198
outAngle:  -2.02149523016
outX:  0.763025164604
outY:  -0.646368861198
outWeight:  6.10800218582

И та же кривая, что и невзвешенная:

point:  0
time(x): 14
value(y): 8.535
inAngle:  -48.7059321223
inX:  0.583333313465
inY:  -15.9391937256
inWeight:  7.07152271271
outAngle:  -48.7059355374
outX:  0.33333337307
outY:  -9.10811233521
outWeight:  4.0408706665
point:  1
time(x): 22
value(y): -12.131
inAngle:  -26.318250542
inX:  0.33333337307
inY:  -3.95701789856
inWeight:  2.97504448891
outAngle:  -26.318250542
outX:  0.416666686535
outY:  -4.94627189636
outWeight:  3.71880531311
point:  2
time(x): 32
value(y): -0.369
inAngle:  -1.40329438149
inX:  0.416666686535
inY:  -0.244970053434
inWeight:  3.3343334198
outAngle:  -2.02149523016
outX:  0.763025164604
outY:  -0.646368861198
outWeight:  6.10800218582

0 ответов

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