getLineIntersections method
- Line line
Get intersection points of a line segment with this circle
Returns 0, 1, or 2 points.
Implementation
List<Point> getLineIntersections(Line line) {
final dx = line.b.x - line.a.x;
final dy = line.b.y - line.a.y;
final fx = line.a.x - center.x;
final fy = line.a.y - center.y;
final a = dx * dx + dy * dy;
final b = 2 * (fx * dx + fy * dy);
final c = fx * fx + fy * fy - radius * radius;
final discriminant = b * b - 4 * a * c;
if (discriminant < 0) return [];
final results = <Point>[];
final sqrtD = sqrt(max(0, discriminant));
final t1 = (-b - sqrtD) / (2 * a);
final t2 = (-b + sqrtD) / (2 * a);
if (t1 >= 0 && t1 <= 1) {
results.add(Point(line.a.x + t1 * dx, line.a.y + t1 * dy));
}
if (discriminant > 0 && t2 >= 0 && t2 <= 1) {
results.add(Point(line.a.x + t2 * dx, line.a.y + t2 * dy));
}
return results;
}