GEOS
3.9.1dev
|
Computes the minimum diameter of a geom::Geometry. More...
#include <MinimumDiameter.h>
Public Member Functions | |
~MinimumDiameter ()=default | |
MinimumDiameter (const geom::Geometry *newInputGeom) | |
Compute a minimum diameter for a given Geometry. More... | |
MinimumDiameter (const geom::Geometry *newInputGeom, const bool newIsConvex) | |
Compute a minimum diameter for a given Geometry, with a hint if the Geometry is convex (e.g. a convex Polygon or LinearRing, or a two-point LineString, or a Point). More... | |
double | getLength () |
Gets the length of the minimum diameter of the input Geometry. More... | |
const geom::Coordinate & | getWidthCoordinate () |
Gets the geom::Coordinate forming one end of the minimum diameter. More... | |
std::unique_ptr< geom::LineString > | getSupportingSegment () |
Gets the segment forming the base of the minimum diameter. More... | |
std::unique_ptr< geom::LineString > | getDiameter () |
Gets a LineString which is a minimum diameter. More... | |
std::unique_ptr< geom::Geometry > | getMinimumRectangle () |
Gets the minimum rectangular Polygon which encloses the input geometry. More... | |
Static Public Member Functions | |
static std::unique_ptr< geom::Geometry > | getMinimumRectangle (geom::Geometry *geom) |
Gets the minimum rectangle enclosing a geometry. More... | |
static std::unique_ptr< geom::Geometry > | getMinimumDiameter (geom::Geometry *geom) |
Gets the length of the minimum diameter enclosing a geometry. More... | |
Private Member Functions | |
void | computeMinimumDiameter () |
void | computeWidthConvex (const geom::Geometry *geom) |
void | computeConvexRingMinDiameter (const geom::CoordinateSequence *pts) |
unsigned int | findMaxPerpDistance (const geom::CoordinateSequence *pts, const geom::LineSegment *seg, unsigned int startIndex) |
Static Private Member Functions | |
static unsigned int | getNextIndex (const geom::CoordinateSequence *pts, unsigned int index) |
static double | computeC (double a, double b, const geom::Coordinate &p) |
static geom::LineSegment | computeSegmentForLine (double a, double b, double c) |
Private Attributes | |
const geom::Geometry * | inputGeom |
bool | isConvex |
std::unique_ptr< geom::CoordinateSequence > | convexHullPts |
geom::LineSegment | minBaseSeg |
geom::Coordinate | minWidthPt |
size_t | minPtIndex |
double | minWidth |
Computes the minimum diameter of a geom::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.
Definition at line 63 of file MinimumDiameter.h.
|
default |
geos::algorithm::MinimumDiameter::MinimumDiameter | ( | const geom::Geometry * | newInputGeom | ) |
Compute a minimum diameter for a given Geometry.
newInputGeom | a Geometry |
geos::algorithm::MinimumDiameter::MinimumDiameter | ( | const geom::Geometry * | newInputGeom, |
const bool | newIsConvex | ||
) |
Compute a minimum diameter for a given Geometry, with a hint if the Geometry is convex (e.g. a convex Polygon or LinearRing, or a two-point LineString, or a Point).
newInputGeom | a Geometry which is convex |
newIsConvex | true if the input geometry is convex |
|
staticprivate |
|
private |
Compute the width information for a ring of geom::Coordinates. Leaves the width information in the instance variables.
pts |
|
private |
|
staticprivate |
|
private |
|
private |
std::unique_ptr<geom::LineString> geos::algorithm::MinimumDiameter::getDiameter | ( | ) |
Gets a LineString which is a minimum diameter.
double geos::algorithm::MinimumDiameter::getLength | ( | ) |
Gets the length of the minimum diameter of the input Geometry.
|
static |
Gets the length of the minimum diameter enclosing a geometry.
geom | the geometry |
std::unique_ptr<geom::Geometry> geos::algorithm::MinimumDiameter::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 hill 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.
|
static |
Gets the minimum rectangle enclosing a geometry.
geom | the geometry |
|
staticprivate |
std::unique_ptr<geom::LineString> geos::algorithm::MinimumDiameter::getSupportingSegment | ( | ) |
Gets the segment forming the base of the minimum diameter.
const geom::Coordinate& geos::algorithm::MinimumDiameter::getWidthCoordinate | ( | ) |
Gets the geom::Coordinate forming one end of the minimum diameter.
|
private |
Definition at line 68 of file MinimumDiameter.h.
|
private |
Definition at line 65 of file MinimumDiameter.h.
|
private |
Definition at line 66 of file MinimumDiameter.h.
|
private |
Definition at line 70 of file MinimumDiameter.h.
|
private |
Definition at line 72 of file MinimumDiameter.h.
|
private |
Definition at line 73 of file MinimumDiameter.h.
|
private |
Definition at line 71 of file MinimumDiameter.h.