From 28d948a36eebe15a03906cf7d4ffe658bcce9dcf Mon Sep 17 00:00:00 2001 From: Patrick Walton Date: Sat, 29 Dec 2018 18:29:26 -0800 Subject: [PATCH] Use Horner's method to evaluate cubics --- utils/tile-svg/src/main.rs | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/utils/tile-svg/src/main.rs b/utils/tile-svg/src/main.rs index 00c002b9..035bc2e0 100644 --- a/utils/tile-svg/src/main.rs +++ b/utils/tile-svg/src/main.rs @@ -1736,15 +1736,11 @@ impl CubicAxis { } impl SolveT for CubicAxis { fn sample(&self, t: f32) -> f32 { - let t2 = t * t; - let t3 = t2 * t; - - let c3 = self.to + 3.0 * (self.ctrl0 - self.ctrl1) - self.from; - let c2 = 3.0 * (self.from - 2.0 * self.ctrl0 + self.ctrl1); - let c1 = 3.0 * (self.ctrl0 - self.from); - let c0 = self.from; - - c3 * t3 + c2 * t2 + c1 * t + c0 + let b3 = self.to + 3.0 * (self.ctrl0 - self.ctrl1) - self.from; + let b2 = 3.0 * (self.from - 2.0 * self.ctrl0 + self.ctrl1) + b3 * t; + let b1 = 3.0 * (self.ctrl0 - self.from) + b2 * t; + let b0 = self.from + b1 * t; + b0 } fn sample_deriv(&self, t: f32) -> f32 { let inv_t = 1.0 - t;