There is not a linear continuity in the solutions.
I tried that method but with a wider range of diameters:
and the resulting diameter is different from yours.
This is the shape for all possible tangents from a R15 (100,80) circle with any other circle passing through origin and tangent to X (with positive Y center):
(… wtf it resemble a fat naca profile
The white curve is not a parabola, or a simple nurbs curve of 3 or 4 points.
(neither is the result of the offset of a similar curve from r-15)
If we could create this white curve in any simpler way, the solution is just intersecting it with X=20 line, obviously.
In Grasshopper for this I wouldn’t use Galapagos (which bounce around a lot the exact solution) or Kangaroo (a bit more complex to setup) or doing “n” divisions and then intersect (like the picture above ^) … I use my simple searcher script:
which is fast and simple to setup, and it practically search and find any possible solution in few seconds.

tangent search.gh (15.8 KB)
The script simply search for all possible n values in a slider, then it repeats the search in between the best 2 of those, etc etc, until the value no longer change.
To exploit the maximum amount of significant digits in the slider, the value is divided by 10^4 .
Imo the correct solution is: R= 35.0921997266
This is not a practical solution, just a workaround not accessible to everyone.
I agree that Rhino needs at least a minimal 2D constraint system to quickly solve similar cases.

