public bool IntersectsWith(Circle other) { var dx = X - other.X; var dy = Y - other.Y; var r = R + other.R; return dx * dx + dy * dy < r * r; }
private Circle createNewCircleAtLowestPossiblePlace(float r) { const float delta = 2; var lo = r; var hi = MaxUsedY + r; var circle = new Circle(NextDropX - r, 0, r); while (lo + delta < hi) { circle.Y = (lo + hi) / 2; if (fits(circle)) hi = circle.Y - 1; else lo = circle.Y + 1; } return circle; }
private bool fits(Circle circle) { return Circles.TrueForAll(_ => !_.IntersectsWith(circle)); }