boundingBox property
Approximate bounding box by sampling points
Implementation
Rectangle get boundingBox {
double minX = start.x, maxX = start.x;
double minY = start.y, maxY = start.y;
for (final p in [start, control, end]) {
minX = min(minX, p.x);
maxX = max(maxX, p.x);
minY = min(minY, p.y);
maxY = max(maxY, p.y);
}
// Check extrema via derivative: dt = (start - control) / (start - 2*control + end)
for (final axis in [0, 1]) {
final s = axis == 0 ? start.x : start.y;
final c = axis == 0 ? control.x : control.y;
final e = axis == 0 ? end.x : end.y;
final denom = s - 2 * c + e;
if (denom != 0) {
final t = (s - c) / denom;
if (t > 0 && t < 1) {
final p = pointAt(t);
minX = min(minX, p.x);
maxX = max(maxX, p.x);
minY = min(minY, p.y);
maxY = max(maxY, p.y);
}
}
}
return Rectangle(x: minX, y: minY, width: maxX - minX, height: maxY - minY);
}