boundingBox property

Rectangle get boundingBox

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);
}