Navigation

Smallest enclosing circle

Demo (JavaScript)

Random static pointsRandom moving pointsManual positioning

This JavaScript program computes the smallest circle that encloses an arbitrary set of points in the plane. Points defining the circumference are colored red; points in the interior are colored gray. Instructions for manual positioning mode:

Left-click in a blank space to add a new point

Left-click an existing point and drag to move it

Right-click an existing point to delete it

Description

Although the problem looks easy to solve visually, the algorithm is in fact moderately long and quite tricky. (This deceptive difficulty is a common theme in computational geometry.) I don’t fully understand how to solve this problem from scratch, and my program’s implementation relies heavily on the mathematics and reasoning covered in the PDF below. This randomized algorithm runs in expected linear time, unlike the naive Θ(n4) algorithm. Thus it can handle thousands of points with ease.