diff --git a/src/Magnum/Math/Bezier.h b/src/Magnum/Math/Bezier.h index ad8d00327..67c3e1f1f 100644 --- a/src/Magnum/Math/Bezier.h +++ b/src/Magnum/Math/Bezier.h @@ -30,8 +30,6 @@ * @brief Class @ref Magnum::Math::Bezier, alias @ref Magnum::Math::QuadraticBezier, @ref Magnum::Math::QuadraticBezier2D, @ref Magnum::Math::QuadraticBezier3D, @ref Magnum::Math::CubicBezier, @ref Magnum::Math::CubicBezier2D, @ref Magnum::Math::CubicBezier3D */ -#include - #include "Magnum/Math/Vector.h" namespace Magnum { namespace Math { @@ -178,7 +176,9 @@ template class Bezier { * @see @ref subdivide() */ Vector value(Float t) const { - return calculateIntermediatePoints(t)[0][order]; + Bezier iPoints[order + 1]; + calculateIntermediatePoints(iPoints, t); + return iPoints[0][order]; } /** @@ -189,7 +189,8 @@ template class Bezier { * @see @ref value() */ std::pair, Bezier> subdivide(Float t) const { - const auto iPoints = calculateIntermediatePoints(t); + Bezier iPoints[order + 1]; + calculateIntermediatePoints(iPoints, t); Bezier left, right; for(std::size_t i = 0; i <= order; ++i) left[i] = iPoints[0][i]; @@ -207,8 +208,7 @@ template class Bezier { template constexpr explicit Bezier(Implementation::Sequence, U): _data{Vector((static_cast(sequence), U{typename U::Init{}}))...} {} /* Calculates and returns all intermediate points generated when using De Casteljau's algorithm */ - std::array, order + 1> calculateIntermediatePoints(Float t) const { - std::array, order + 1> iPoints; + void calculateIntermediatePoints(Bezier(&iPoints)[order + 1], Float t) const { for(std::size_t i = 0; i <= order; ++i) { iPoints[i][0] = _data[i]; } @@ -217,7 +217,6 @@ template class Bezier { iPoints[i][r] = (1 - t)*iPoints[i][r - 1] + t*iPoints[i + 1][r - 1]; } } - return iPoints; } Vector _data[order + 1];