Diameter (computational geometry)
From Wikipedia, the free encyclopedia
In computational geometry, the diameter of a finite set of points or of a polygon is its diameter as a set, the largest distance between any two points. The diameter is always attained by two points of the convex hull of the input. A trivial brute-force search can be used to find the diameter of points in time (assuming constant-time distance evaluations) but faster algorithms are possible for points in low dimensions.
In two dimensions, the diameter can be obtained by computing the convex hull and then applying the method of rotating calipers. This involves finding two parallel support lines for the convex hull (for instance vertical lines through the two vertices with minimum and maximum -coordinate) and then rotating the two lines through a sequence of discrete steps that keep them as parallel lines of support until they have rotated back to their original orientation. The diameter is the maximum distance between any pair of convex hull vertices found as the two points of contact of the parallel lines in this sweep. The time for this method is dominated by the time for constructing the convex hull: for a finite set of points, or time for a simple polygon with vertices.[1]
Dynamic 2d input
For a dynamic two-dimensional point set subject to point insertions and deletions, an approximation to the diameter, with an approximation ratio that can be chosen arbitrarily close to one, can be maintained in time per operation.[2] The exact diameter can be maintained dynamically in expected time per operation, in an input model in which the set of points to be inserted and deleted, and the order of insertion and deletion operations, is worst-case but the point chosen to be inserted or deleted in each operation is chosen randomly from the given set.[3]
For a dynamic two-dimensional point set of a different type, points each moving linearly with fixed velocities, the time at which the points attain their minimum diameter and the diameter at that time can be computed in time [4]