aboutsummaryrefslogtreecommitdiffhomepage
path: root/experimental/Intersection/QuadraticReduceOrder.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'experimental/Intersection/QuadraticReduceOrder.cpp')
-rw-r--r--experimental/Intersection/QuadraticReduceOrder.cpp18
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