Consider two disks: $S$ with radius $R_S$ and position $(x_S,y_S)$, and $M$ with radius $R_M$ and position $(x_M,y_M)$. Let's denote the difference between these two sets as
Now the problem is: given two uniformly distributed random numbers $a,b\in[0,1]$, assuming $V\ne\emptyset$, compose from them a uniformly distributed point $p=(x,y)\in V$.
The most obvious solution would be to generate a point $p_0=f(a,b)\in S$ (where $f$ is simple to construct) and, if $p_0\in M$, then discard it, otherwise return $p_0$. But for large overlaps between $S$ and $M$ (e.g. solar eclipse just before totality, with $S$ being the Sun and $M$ the Moon) this strategy will be grossly inefficient due to high rejection rate.
A better approach is to find the thinnest annulus $A$ with outer radius being $R_S$ and inner radius just small enough to fit $V$ into $A$. If we sample only inside the annulus (which is a simple modification of sampling in a full disk), we'll drastically reduce the rejection rate.
But this is still not the best. I suppose there should be a simple way to generate random points in $V$ without rejection at all. But I can't seem to find a way. How can this be done?