Приведём реализацию описанных математических функций используемых для построения промежуточных состояний объекта. В приведённой реализации использовалась модуль для математических вычислений из библиотеки Ogre, распространённой библиотеки для трёхмерной графики с открытым исходным кодом.
Для линейной функции реализация наиболее проста и выглядит как показано ниже.
def deltaLinearAnimation (self, progress):
return progress.
Здесь видно, что значение параметра определяющего состояние объекта изменяется по линейной зависимости от части прошедшего времени в заданном интервале. В данной функции и далее progress — это часть заданного интервала времени, которая прошла с момента изменения состояния.
Реализация для квадратичной функции и функции от аргумента пятой степени были объединены в один метод, принимающий на вход требуемую степень аргумента. Таким образом становится возможным задавать абсолютно любые степенные функции.
def deltaPowerOfNAnimation (self, progress, power):
return Math. Pow (progress, power).
Вычисление функции определяющей дугу окружности выглядит следующим образом:
def deltaCircleAnimation (self, progress):
return 1 — Math. Sin (Math.ACos (progress)).
Следующим является метод для вычисления анимации по закону синуса:
def deltaSineAnimation (self, progress):
return 1 — Math. Sin ((1 — progress) * Math. PI / 2).
Реализация функции описывающей возрастающие колебательные движения:
def deltaElasticAnimation (self, progress, x):
return Math. Pow (2, 10 * (progress — 1)).
* Math. Cos (20 * Math. PI * x / 3 * progress).
Заключительной является так называемая функция «back». Её реализация представлена ниже.
def deltaBackAnimation (self, progress, x):
return Math. Pow (progress, 2) * ((x + 1) * progress — x).
Из всех приведённых методов становится видно, что все они реализуются подобным образом, что означает лёгкость добавления новых математических функций, если в этом возникнет необходимость. Таким образом, набор математических законов, по которым происходит построение цепочки промежуточных состояний объекта, теоретически может быть расширен до любых необходимых размеров.