"Кроме того, я понимаю, что это значительно улучшило бы его оптимизацию путем обновления до современного C ++"
На самом деле код выглядит так, как будто лучшая оптимизация - это векторизация, например используя AVX на x86 или NEON на ARM. И это лучше всего работает, если векторизатор может работать с индексами и четкими границами. Итак:
vec2 getBezierPoint( std::vector<vec2> points, float t ) {
auto const maxi = points.size()-1;
for(int i = 0; i != maxi; ++i)
{
auto const maxj = maxi-i;
for (int j = 0; j < maxj; ++j)
points[j] += t * ( points[j+1] - points[j] );
}
return points[0];
}
Однако обратите внимание, что основная проблема оптимизации заключается в том, что вы получаете только одно очко за раз. Как правило, вам нужна вся кривая (от t = 0.0 до t = 1.0), а затем выполняется довольно много лишней работы - все эти границы цикла идентичны для всех значений t
.