Package org.locationtech.jts.algorithm
Class MinimumDiameter
- java.lang.Object
-
- org.locationtech.jts.algorithm.MinimumDiameter
-
public class MinimumDiameter extends java.lang.Object
Computes the minimum diameter of aGeometry
. 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:
ConvexHull
-
-
Field Summary
Fields Modifier and Type Field Description private Coordinate[]
convexHullPts
private Geometry
inputGeom
private boolean
isConvex
private LineSegment
minBaseSeg
private int
minPtIndex
private double
minWidth
private Coordinate
minWidthPt
-
Constructor Summary
Constructors Constructor Description MinimumDiameter(Geometry inputGeom)
Compute a minimum diameter for a givenGeometry
.MinimumDiameter(Geometry inputGeom, boolean isConvex)
Compute a minimum diameter for a giverGeometry
, with a hint if the Geometry is convex (e.g.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description private static double
computeC(double a, double b, Coordinate p)
private void
computeConvexRingMinDiameter(Coordinate[] pts)
Compute the width information for a ring ofCoordinate
s.private void
computeMinimumDiameter()
private static LineSegment
computeSegmentForLine(double a, double b, double c)
private void
computeWidthConvex(Geometry convexGeom)
private int
findMaxPerpDistance(Coordinate[] pts, LineSegment seg, int startIndex)
LineString
getDiameter()
Gets aLineString
which is a minimum diameterdouble
getLength()
Gets the length of the minimum diameter of the input Geometrystatic Geometry
getMinimumDiameter(Geometry geom)
Gets the length of the minimum diameter enclosing a geometryGeometry
getMinimumRectangle()
Gets the minimum rectangularPolygon
which encloses the input geometry.static Geometry
getMinimumRectangle(Geometry geom)
Gets the minimum rectangle enclosing a geometry.LineString
getSupportingSegment()
Gets the segment forming the base of the minimum diameterCoordinate
getWidthCoordinate()
Gets theCoordinate
forming one end of the minimum diameterprivate static int
nextIndex(Coordinate[] pts, int index)
-
-
-
Field Detail
-
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 Detail
-
MinimumDiameter
public MinimumDiameter(Geometry inputGeom)
Compute a minimum diameter for a givenGeometry
.- Parameters:
inputGeom
- a Geometry
-
MinimumDiameter
public MinimumDiameter(Geometry inputGeom, boolean isConvex)
Compute a minimum diameter for a giverGeometry
, 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 convexisConvex
-true
if the input geometry is convex
-
-
Method Detail
-
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 theCoordinate
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 aLineString
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 ofCoordinate
s. 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 rectangularPolygon
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) aLineString
orPoint
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)
-
-