diff options
Diffstat (limited to 'experimental/Intersection/QuadraticReduceOrder.cpp')
-rw-r--r-- | experimental/Intersection/QuadraticReduceOrder.cpp | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/experimental/Intersection/QuadraticReduceOrder.cpp b/experimental/Intersection/QuadraticReduceOrder.cpp index 4eef1a7781..f85cdc86eb 100644 --- a/experimental/Intersection/QuadraticReduceOrder.cpp +++ b/experimental/Intersection/QuadraticReduceOrder.cpp @@ -60,13 +60,7 @@ static int check_linear(const Quadratic& quad, Quadratic& reduction, assert(0); } } - LineParameters lineParameters; - lineParameters.quadEndPoints(quad, startIndex, endIndex); - double normalSquared = lineParameters.normalSquared(); - double distance = lineParameters.controlPtDistance(quad); // not normalized - double limit = normalSquared * SquaredEpsilon; - double distSq = distance * distance; - if (distSq > limit) { + if (!isLinear(quad, startIndex, endIndex)) { return 0; } // four are colinear: return line formed by outside @@ -113,6 +107,16 @@ static int check_linear(const Quadratic& quad, Quadratic& reduction, return 2; } +bool isLinear(const Quadratic& quad, int startIndex, int endIndex) { + LineParameters lineParameters; + lineParameters.quadEndPoints(quad, startIndex, endIndex); + double normalSquared = lineParameters.normalSquared(); + double distance = lineParameters.controlPtDistance(quad); // not normalized + double limit = normalSquared * SquaredEpsilon; + double distSq = distance * distance; + return distSq <= limit; +} + // reduce to a quadratic or smaller // look for identical points // look for all four points in a line |