boundaryToward method

  1. @override
DiagramPoint boundaryToward(
  1. DiagramPoint target
)
override

Implementation

@override
DiagramPoint boundaryToward(DiagramPoint target) {
  final center = bounds.center;
  final ray = target - center;
  if (ray.x == 0 && ray.y == 0) return center;
  var nearestScale = double.infinity;
  for (var index = 0; index < points.length; index += 1) {
    final start = points[index];
    final end = points[(index + 1) % points.length];
    final edge = end - start;
    final denominator = _cross(ray, edge);
    if (denominator.abs() < 1e-9) continue;
    final fromCenter = start - center;
    final rayScale = _cross(fromCenter, edge) / denominator;
    final edgeScale = _cross(fromCenter, ray) / denominator;
    if (rayScale >= 0 &&
        edgeScale >= 0 &&
        edgeScale <= 1 &&
        rayScale < nearestScale) {
      nearestScale = rayScale;
    }
  }
  return nearestScale.isFinite ? center + ray * nearestScale : center;
}