From 22aa22c99c63b8a52746db1b757885e7feea7e26 Mon Sep 17 00:00:00 2001 From: Bruno de Oliveira Abinader Date: Fri, 10 Jun 2016 21:56:24 +0300 Subject: [core] UnitBezier ctor is now constexpr --- include/mbgl/util/unitbezier.hpp | 39 +++++++++++++++++++-------------------- 1 file changed, 19 insertions(+), 20 deletions(-) (limited to 'include/mbgl') diff --git a/include/mbgl/util/unitbezier.hpp b/include/mbgl/util/unitbezier.hpp index ce3e78f3cc..3a4994917b 100644 --- a/include/mbgl/util/unitbezier.hpp +++ b/include/mbgl/util/unitbezier.hpp @@ -31,32 +31,31 @@ namespace mbgl { namespace util { struct UnitBezier { - UnitBezier(double p1x, double p1y, double p2x, double p2y) { - // Calculate the polynomial coefficients, implicit first and last control points are (0,0) and (1,1). - cx = 3.0 * p1x; - bx = 3.0 * (p2x - p1x) - cx; - ax = 1.0 - cx - bx; - - cy = 3.0 * p1y; - by = 3.0 * (p2y - p1y) - cy; - ay = 1.0 - cy - by; + // Calculate the polynomial coefficients, implicit first and last control points are (0,0) and (1,1). + constexpr UnitBezier(double p1x, double p1y, double p2x, double p2y) + : cx(3.0 * p1x) + , bx(3.0 * (p2x - p1x) - cx) + , ax(1.0 - cx - bx) + , cy(3.0 * p1y) + , by(3.0 * (p2y - p1y) - cy) + , ay(1.0 - cy - by) { } - double sampleCurveX(double t) { + double sampleCurveX(double t) const { // `ax t^3 + bx t^2 + cx t' expanded using Horner's rule. return ((ax * t + bx) * t + cx) * t; } - double sampleCurveY(double t) { + double sampleCurveY(double t) const { return ((ay * t + by) * t + cy) * t; } - double sampleCurveDerivativeX(double t) { + double sampleCurveDerivativeX(double t) const { return (3.0 * ax * t + 2.0 * bx) * t + cx; } // Given an x value, find a parametric value it came from. - double solveCurveX(double x, double epsilon) { + double solveCurveX(double x, double epsilon) const { double t0; double t1; double t2; @@ -100,18 +99,18 @@ struct UnitBezier { return t2; } - double solve(double x, double epsilon) { + double solve(double x, double epsilon) const { return sampleCurveY(solveCurveX(x, epsilon)); } private: - double ax; - double bx; - double cx; + const double cx; + const double bx; + const double ax; - double ay; - double by; - double cy; + const double cy; + const double by; + const double ay; }; } // namespace util -- cgit v1.2.1