Воздушный шар

Воздушный шар летит по кривой траектории, построенной B-сплайном. Траектория задаётся массивом опорных точек "flightPath".

B-сплайн — гладкая кривая, которая огибает эти точки, но не проходит через них. Каждый сегмент кривой строится по 4 соседним точкам, поэтому количество сегментов = число точек − 3. Изменение одной точки влияет только на ближайшие сегменты.

Веса для построения точки сегмента вычисляются по формуле кубического равномерного B-сплайна — раскрытой форме рекуррентной формулы Кокса — де Бора.

Для каждой точки вычисляются 4 веса (w0, w1, w2, w3), затем координаты x и y находятся как взвешенная сумма 4 опорных точек сегмента.

Движение шара по кривой реализовано функцией "getPointOnPath(t)": по глобальному параметру t определяется сегмент, вычисляется локальный параметр внутри сегмента и возвращаются координаты точки.

Анимация происходит в главном цикле "drawFrame": параметр "balloon.t" увеличивается с учётом "deltaTime" и зацикливается при достижении 1, после чего полученная точка передаётся в "drawBalloon" для отрисовки шара в новом положении.