Class MinimumDiameter

java.lang.Object
org.locationtech.jts.algorithm.MinimumDiameter

public class MinimumDiameter extends Object
Computes the minimum diameter of a Geometry. The minimum diameter is defined to be the width of the smallest band that contains the geometry, where a band is a strip of the plane defined by two parallel lines. This can be thought of as the smallest hole that the geometry can be moved through, with a single rotation.

The first step in the algorithm is computing the convex hull of the Geometry. If the input Geometry is known to be convex, a hint can be supplied to avoid this computation.

This class can also be used to compute a line segment representing the minimum diameter, the supporting line segment of the minimum diameter, and a minimum rectangle enclosing the input geometry. This rectangle will have width equal to the minimum diameter, and have one side parallel to the supporting segment.

Version:
1.7
See Also:
  • Field Details

    • inputGeom

      private final Geometry inputGeom
    • isConvex

      private final boolean isConvex
    • convexHullPts

      private Coordinate[] convexHullPts
    • minBaseSeg

      private LineSegment minBaseSeg
    • minWidthPt

      private Coordinate minWidthPt
    • minPtIndex

      private int minPtIndex
    • minWidth

      private double minWidth
  • Constructor Details

    • MinimumDiameter

      public MinimumDiameter(Geometry inputGeom)
      Compute a minimum diameter for a given Geometry.
      Parameters:
      inputGeom - a Geometry
    • MinimumDiameter

      public MinimumDiameter(Geometry inputGeom, boolean isConvex)
      Compute a minimum diameter for a giver Geometry, with a hint if the Geometry is convex (e.g. a convex Polygon or LinearRing, or a two-point LineString, or a Point).
      Parameters:
      inputGeom - a Geometry which is convex
      isConvex - true if the input geometry is convex
  • Method Details

    • getMinimumRectangle

      public static Geometry getMinimumRectangle(Geometry geom)
      Gets the minimum rectangle enclosing a geometry.
      Parameters:
      geom - the geometry
      Returns:
      the minimum rectangle enclosing the geometry
    • getMinimumDiameter

      public static Geometry getMinimumDiameter(Geometry geom)
      Gets the length of the minimum diameter enclosing a geometry
      Parameters:
      geom - the geometry
      Returns:
      the length of the minimum diameter of the geometry
    • getLength

      public double getLength()
      Gets the length of the minimum diameter of the input Geometry
      Returns:
      the length of the minimum diameter
    • getWidthCoordinate

      public Coordinate getWidthCoordinate()
      Gets the Coordinate forming one end of the minimum diameter
      Returns:
      a coordinate forming one end of the minimum diameter
    • getSupportingSegment

      public LineString getSupportingSegment()
      Gets the segment forming the base of the minimum diameter
      Returns:
      the segment forming the base of the minimum diameter
    • getDiameter

      public LineString getDiameter()
      Gets a LineString which is a minimum diameter
      Returns:
      a LineString which is a minimum diameter
    • computeMinimumDiameter

      private void computeMinimumDiameter()
    • computeWidthConvex

      private void computeWidthConvex(Geometry convexGeom)
    • computeConvexRingMinDiameter

      private void computeConvexRingMinDiameter(Coordinate[] pts)
      Compute the width information for a ring of Coordinates. Leaves the width information in the instance variables.
      Parameters:
      pts -
    • findMaxPerpDistance

      private int findMaxPerpDistance(Coordinate[] pts, LineSegment seg, int startIndex)
    • nextIndex

      private static int nextIndex(Coordinate[] pts, int index)
    • getMinimumRectangle

      public Geometry getMinimumRectangle()
      Gets the minimum rectangular Polygon which encloses the input geometry. The rectangle has width equal to the minimum diameter, and a longer length. If the convex hull of the input is degenerate (a line or point) a LineString or Point is returned.

      The minimum rectangle can be used as an extremely generalized representation for the given geometry.

      Returns:
      the minimum rectangle enclosing the input (or a line or point if degenerate)
    • computeC

      private static double computeC(double a, double b, Coordinate p)
    • computeSegmentForLine

      private static LineSegment computeSegmentForLine(double a, double b, double c)