I have a list of points $ (x_i, y_i) $ for $i = 1...n$. Is there an algorithm to determine if the union of the unit discs centered at these points is a superset of the unit disc centered at $(0, 0)$?
Informally, I'm about to draw a whole bunch of non-transparent filled circles and want to know if I really need to bother drawing all of them. Some of them may be covered by circles that I will draw later. All the circles are the same size so I can do some simple preprocessing to give them all radius 1 and I can move them around so that the circle that I might not need to draw is at $(0, 0)$.
To phrase it a different way, I have a list of quadratic inequalities of the form: $$ \begin{aligned} x^2 + y^2 \leq 1 \\ (x - x_1)^2 + (y - y_1)^2 \geq 1 \\ (x - x_2)^2 + (y - y_2)^2 \geq 1 \\ (x - x_3)^2 + (y - y_3)^2 \geq 1 \\ ... \end{aligned} $$ and need to determine if there is a point that satisfies all of them.
Suppose that the unit discs ("given discs") intersect the unit disc at the origin ("origin disc") but do not cover it completely (we can ignore given discs that do not intersect the origin disc at all). Therefore there must be a point in the origin disc which is on the boundary of a given disc but not covered by the interior of any other given disc (proof: pick an uncovered point, and consider the closest given disc). This reduces our goal to checking, for each given disc $D$, whether all points in the intersection $B$ of its boundary with the origin disc are covered by some given disc.
For any disc $D' \neq D$, one can compute the intersection of $B$ and $D'$ since through computing various intersections of $D$, $D'$ and the origin disc. Furthermore, one can parametrize $B$ as an interval $[0,1]$, and present $B \cap D'$ as a closed subinterval of $[0,1]$.
The question is therefore reduced to determining whether some subintervals of $[0,1]$ cover it. Sort the intervals and the check that adjacent intervals are overlapping, and that both endpoints are covered (I haven't flashed out the details, but probably an algorithm can be constructed along these lines).
Implementing this method efficiently can be tricky, and I don't think that in practice you'll save time this way.