segmentIntersectionTriPlaneOrder: it reaches the polynomial path with all three largest ids in the plane
More...
|
| MR_FORCE_INLINE | PerturbationStagesOf (const PreciseVertCoords *vs, const std::int64_t *radices, int n) |
| | the stages of points vs[0..n-1] with the degrees from getPointDegrees
|
| int | numStages () const |
| | the number of stages, which is the number of different ids (if Bounded, of those before the first one whose degrees do not fit)
|
| std::int64_t | place (int s) const |
| | the degree of the points perturbed first at stage s: every term with them has at least this degree, every term of the earlier stages less
|
| const PointDegree & | operator[] (int i) const |
| | point i with its degree, as perturbed at the last stage (if Bounded, with the degree 0 if no stage perturbs it)
|
| PointDegree | at (int i, int s) const |
| | point i as perturbed at stage s
|
| bool | startsAt (int i, int s) const |
| | whether point i is perturbed first at stage s
|
| template<typename F> |
| auto | firstStage (F &&f, std::int64_t maxDeg=cMaxPolyDAll) const -> std::invoke_result_t< F &, int > |
template<int N, bool Bounded>
class MR::detail::PerturbationStagesOf< N, Bounded >
segmentIntersectionTriPlaneOrder: it reaches the polynomial path with all three largest ids in the plane
the points of a predicate with the degrees of their perturbation, which moves them in stages: at stage s = 1, ..., numStages() only the points with the s smallest ids are perturbed (orient3dPoly leaves the others unperturbed); a polynomial of the predicate that is not zero at stage s already has the leading term of the full one, since every term with a point of a later stage has a larger degree than every term without; and if it was zero at stage s - 1, its terms without the points of stage s cancel one another, so only the products of the terms of degrees from place( s ) up remain (see from in lowestTermOfSumOfProducts); at most N points; if Bounded, the degrees need not fit in int64, and the stages end before the first one whose terms can have degrees above it (see getPointDegrees), so that firstStage gives the empty value if no stage before gives one