Convex hull.
Computes the convex hull of a set of points in arbitrary dimension.
This library uses the C library qhull
.
For examples, look at the README file.
convexHullNd
Convex hull in arbitrary dimension.
The main function of this package is convexHull
:
convexHull :: [[Double]] -- ^ vertices
-> Bool -- ^ whether to triangulate
-> Bool -- ^ whether to print output to stdout
-> Maybe FilePath -- ^ write summary to a file
-> IO ConvexHull
The first argument is the list of the Cartesian coordinates of the points for which the convex hull is wanted. The second argument indicates whether one wants a "triangulated" convex hull. In 3D this means all facets of the hull are triangles. In 4D this means they all are tetrahedra. The correct word for any dimension is "simplex".
A ConvexHull
object has the following fields:
_hvertices
: provides the vertices of the convex hull;_hfacets
: provides the facets of the convex hull;_hridges
: provides the ridges (facets of facets) of the convex hull;_hedges
: provides the edges of the convex hull.
ConvexHull
{ _hvertices =
fromList
[ ( 0
, Vertex
{ _point = [ 0.0 , 0.0 , 0.0 ]
, _neighfacets = fromList [ 0 , 1 , 3 ]
, _neighvertices = fromList [ 2 , 3 , 4 ]
, _neighridges = fromList [ 1 , 2 , 4 ]
}
)
, ...
, _hfacets =
fromList
[ ( 0
, Facet
{ _fvertices =
fromList
[ ( 0 , [ 0.0 , 0.0 , 0.0 ] )
, ( 1 , [ 0.0 , 1.0 , 1.0 ] )
, ( 2 , [ 0.0 , 0.0 , 1.0 ] )
, ( 3 , [ 0.0 , 1.0 , 0.0 ] )
]
, _fridges = fromList [ 0 , 1 , 2 , 3 ]
, _centroid = [ 0.0 , 0.5 , 0.5 ]
, _normal' = [ -1.0 , 0.0 , -0.0 ]
, _offset' = -0.0
, _orientation' = 1
, _area = 1.0
, _neighbors = fromList [ 1 , 2 , 3 , 5 ]
, _family' = None
, _fedges =
fromList
[ ( Pair 0 2 , ( [ 0.0 , 0.0 , 0.0 ] , [ 0.0 , 0.0 , 1.0 ] ) )
, ( Pair 0 3 , ( [ 0.0 , 0.0 , 0.0 ] , [ 0.0 , 1.0 , 0.0 ] ) )
, ( Pair 1 2 , ( [ 0.0 , 1.0 , 1.0 ] , [ 0.0 , 0.0 , 1.0 ] ) )
, ( Pair 1 3 , ( [ 0.0 , 1.0 , 1.0 ] , [ 0.0 , 1.0 , 0.0 ] ) )
]
}
)
, ...
, _hridges =
fromList
[ ( 0
, Ridge
{ _rvertices =
fromList
[ ( 1 , [ 0.0 , 1.0 , 1.0 ] ) , ( 2 , [ 0.0 , 0.0 , 1.0 ] ) ]
, _ridgeOf = fromList [ 0 , 2 ]
, _redges = fromList []
}
)
, ...
, _hedges =
fromList
[ ( Pair 0 2 , ( [ 0.0 , 0.0 , 0.0 ] , [ 0.0 , 0.0 , 1.0 ] ) )
, ...
This is a big object. The function hullSummary
returns a summary of it.
The hullVolume
function returns the volume of the convex hull in any dimension (area in dimension 2, volume in dimension 3, hypervolume in higher dimension).
Another useful function is hullToSTL
for dimension 3. It writes a STL file of the mesh representing the convex hull. One can visualize it in e.g. MeshLab.