Find the equation of tangent line to parabola … borrring calculus drill.
Okay. Draw two tangent lines to the parabola, then. Where do they intersect?

If the points of tangency are and
, then the tangent lines are
and
. Equate and solve:
Neat! The -coordinate of the intersection point is midway between
and
.
What does the -coordinate of the intersection tell us? It simplifies to
the geometric meaning of which is not immediately clear. But maybe we should look at the vertical distance from intersection to the parabola itself. That would be
This is the square of the distance from the midpoint to and
. In other words, the squared radius of the smallest “disk” covering the set
.
Same happens in higher dimensions, where parabola is replaced with the paraboloid ,
.

Indeed, the tangent planes at and
are
and
. Equate and solve:
So, lies on the equidistant plane from
and
. And, as above,
is the square of the radius of smallest disk covering both and
.
The above observations are useful for finding the smallest disk (or ball) covering given points. For simplicity, I stick to two dimensions: covering points on a plane with the smallest disk possible. The algorithm is:
- Given points
,
, write down the equations of tangent planes to paraboloid
. These are
.
- Find the point
that minimizes the vertical distance to paraboloid, that is
, and lies (non-strictly) below all of these tangent planes.
- The
coordinates of this point is the center of the smallest disk covering the points. (Known as the Chebyshev center of the set). Also,
is the radius of this disk; known as the Chebyshev radius.
The advantage conferred by the paraboloid model is that at step 2 we are minimizing a quadratic function subject to linear constraints. Implementation in Sage:
points = [[1,3], [1.5,2], [3,2], [2,-1], [-1,0.5], [-1,1]] constraints = [lambda x, p=q: 2*x[0]*p[0]+2*x[1]*p[1]-p[0]^2-p[1]^2-x[2] for q in points] target = lambda x: x[0]^2+x[1]^2-x[2] m = minimize_constrained(target,constraints,[0,0,0]) circle((m[0],m[1]),sqrt(m[0]^2+m[1]^2-m[2]),color='red') + point(points)

Credit: this post is an expanded version of a comment by David Speyer on last year’s post Covering points with caps, where I considered the same problem on a sphere.