diff --git a/src/2geom/curve.h b/src/2geom/curve.h
index b81548ba832914b756d981fc0bbeb59b215b9a40..af02d6edba9d3afeb4db2292cfef3fccd2d5c3b7 100644 (file)
--- a/src/2geom/curve.h
+++ b/src/2geom/curve.h
virtual Curve *duplicate() const = 0;
- virtual Rect boundsFast() const = 0;
- virtual Rect boundsExact() const = 0;
- virtual Rect boundsLocal(Interval i, unsigned deg) const = 0;
- Rect boundsLocal(Interval i) const { return boundsLocal(i, 0); }
+ virtual OptRect boundsFast() const = 0;
+ virtual OptRect boundsExact() const = 0;
+ virtual OptRect boundsLocal(OptInterval i, unsigned deg) const = 0;
+ OptRect boundsLocal(OptInterval i) const { return boundsLocal(i, 0); }
virtual std::vector<double> roots(double v, Dim2 d) const = 0;
*/
virtual Point unitTangentAt(Coord t, unsigned n = 3) const
{
- for (unsigned deriv_n = 1; deriv_n <= n; deriv_n++) {
- Point deriv = pointAndDerivatives(t, deriv_n)[deriv_n];
- Coord length = deriv.length();
+ std::vector<Point> derivs = pointAndDerivatives(t, n);
+ for (unsigned deriv_n = 1; deriv_n < derivs.size(); deriv_n++) {
+ Coord length = derivs[deriv_n].length();
if ( ! are_near(length, 0) ) {
// length of derivative is non-zero, so return unit vector
- return deriv / length;
+ derivs[deriv_n] / length;
}
}
return Point (0,0);