intersectsCircle method
- Circle circle
Get intersection points of this ray with a Circle.
Returns a list of 0, 1, or 2 intersection points.
Implementation
List<Point> intersectsCircle(Circle circle) {
final nd = normalizedDirection;
final dx = origin.x - circle.center.x;
final dy = origin.y - circle.center.y;
final a = nd.x * nd.x + nd.y * nd.y;
final b = 2 * (dx * nd.x + dy * nd.y);
final c = dx * dx + dy * dy - circle.radius * circle.radius;
final discriminant = b * b - 4 * a * c;
if (discriminant < 0) return [];
final results = <Point>[];
if (discriminant == 0) {
final t = -b / (2 * a);
if (t >= 0) results.add(pointAt(t));
} else {
final sqrtD = sqrt(discriminant);
final t1 = (-b - sqrtD) / (2 * a);
final t2 = (-b + sqrtD) / (2 * a);
if (t1 >= 0) results.add(pointAt(t1));
if (t2 >= 0) results.add(pointAt(t2));
}
return results;
}