Воздушный шар
Воздушный шар летит по кривой траектории, построенной B-сплайном. Траектория задаётся массивом опорных точек "flightPath".
B-сплайн — гладкая кривая, которая огибает эти точки, но не проходит через них. Каждый сегмент кривой строится по 4 соседним точкам, поэтому количество сегментов = число точек − 3. Изменение одной точки влияет только на ближайшие сегменты.
Веса для построения точки сегмента вычисляются по формуле кубического равномерного B-сплайна — раскрытой форме рекуррентной формулы Кокса — де Бора.
Для каждой точки вычисляются 4 веса (w0, w1, w2, w3), затем координаты x и y находятся как взвешенная сумма 4 опорных точек сегмента.
Движение шара по кривой реализовано функцией "getPointOnPath(t)": по глобальному параметру t определяется сегмент, вычисляется локальный параметр внутри сегмента и возвращаются координаты точки.
Анимация происходит в главном цикле "drawFrame": параметр "balloon.t" увеличивается с учётом "deltaTime" и зацикливается при достижении 1, после чего полученная точка передаётся в "drawBalloon" для отрисовки шара в новом положении.
