Как интерполировать взвешенные сплайны Эрмита в 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