The convex hull of a set of points is the smallest convex set containing the points. See the detailed introduction by O'Rourke ['94]. See Description of Qhull and How Qhull adds a point.
- Example: rbox 10 D3 | qconvex s o TO result
- Compute the 3-d convex hull of 10 random points. Write a summary to the console and the points and facets to 'result'.
- Example: rbox c | qconvex n
- Print the normals for each facet of a cube.
- Example: rbox c | qconvex i Qt
- Print the triangulated facets of a cube.
- Example: rbox y 500 W0 | qconvex
- Compute the convex hull of a simplex with 500 points on its surface.
- Example: rbox x W1e-12 1000 | qconvex QR0
- Compute the convex hull of 1000 points near the surface of a randomly rotated simplex. Report the maximum thickness of a facet.
- Example: rbox 1000 s | qconvex s FA
- Compute the convex hull of 1000 cospherical points. Verify the results and print a summary with the total area and volume.
- Example: rbox d D12 | qconvex QR0 FA
- Compute the convex hull of a 12-d diamond. Randomly rotate the input. Note the large number of facets and the small volume.
- Example: rbox c D7 | qconvex FA TF1000
- Compute the convex hull of the 7-d hypercube. Report on progress every 1000 facets. Computing the convex hull of the 9-d hypercube takes too much time and space.
- Example: rbox c d D2 | qconvex Qc s f Fx | more
- Dump all fields of all facets for a square and a diamond. Also print a summary and a list of vertices. Note the coplanar points.
Except for rbox, all of the qhull programs compute a convex hull.
By default, Qhull merges coplanar facets. For example, the convex hull of a cube's vertices has six facets.
If you use 'Qt' (triangulated output), all facets will be simplicial (e.g., triangles in 2-d). For the cube example, it will have 12 facets. Some facets may be degenerate and have zero area.
If you use 'QJ' (joggled input), all facets will be simplicial. The corresponding vertices will be slightly perturbed and identical points will be joggled apart. Joggled input is less accurate that triangulated output.See Merged facets or joggled input.
The output for 4-d convex hulls may be confusing if the convex
hull contains non-simplicial facets (e.g., a hypercube). See
Why
are there extra points in a 4-d or higher convex hull?
The 'qconvex' program is equivalent to 'qhull'. It disables the following Qhull options: d v H Qbb Qf Qg Qm Qr Qu Qv Qx Qz TR E V Fp Gt Q0,etc.
Copyright © 1995-2020 C.B. Barber
qconvex -- compute the convex hull. input (stdin): dimension, number of points, point coordinates comments start with a non-numeric character options: Qt - triangulated output QJ - joggled input instead of merged facets Tv - verify result: structure, convexity, and point inclusion . - concise list of all options - - one-line description of each option -? - this message -V - version output options (subset): s - summary of results (default) i - vertices incident to each facet n - normals with offsets p - vertex coordinates (if 'Qc', includes coplanar points) FA - report total area and volume FS - total area and volume Fx - extreme points (convex hull vertices) G - Geomview output (2-d, 3-d, and 4-d) m - Mathematica output (2-d and 3-d) o - OFF format (dim, n, points, facets) QVn - print facets that include point n, -n if not TI file - input file, may be enclosed in single quotes TO file - output file, may be enclosed in single quotes examples: rbox c D2 | qconvex s n rbox c D2 | qconvex i rbox c D2 | qconvex o rbox 1000 s | qconvex s Tv FA rbox c d D2 | qconvex s Qc Fx rbox y 1000 W0 | qconvex Qc s n rbox y 1000 W0 | qconvex s QJ rbox d G1 D12 | qconvex QR0 FA Pp rbox c D7 | qconvex FA TF1000
The input data on stdin consists of:
- dimension
- number of points
- point coordinates
Use I/O redirection (e.g., qconvex < data.txt), a pipe (e.g., rbox 10 | qconvex), or the 'TI' option (e.g., qconvex TI data.txt).
Comments start with a non-numeric character. Error reporting is simpler if there is one point per line. Dimension and number of points may be reversed.
Here is the input for computing the convex hull of the unit cube. The output is the normals, one per facet.
rbox c > data
3 RBOX c 8 -0.5 -0.5 -0.5 -0.5 -0.5 0.5 -0.5 0.5 -0.5 -0.5 0.5 0.5 0.5 -0.5 -0.5 0.5 -0.5 0.5 0.5 0.5 -0.5 0.5 0.5 0.5qconvex s n < data
Convex hull of 8 points in 3-d: Number of vertices: 8 Number of facets: 6 Number of non-simplicial facets: 6 Statistics for: RBOX c | QCONVEX s n Number of points processed: 8 Number of hyperplanes created: 11 Number of distance tests for qhull: 35 Number of merged facets: 6 Number of distance tests for merging: 84 CPU seconds to compute hull (after input): 0.081 4 6 0 0 -1 -0.5 0 -1 0 -0.5 1 0 0 -0.5 -1 0 0 -0.5 0 1 0 -0.5 0 0 1 -0.5
These options control the output of qconvex. They may be used individually or together.
- Vertices
- Fx
- list extreme points (i.e., vertices). The first line is the number of extreme points. Each point is listed, one per line. The cube example has eight vertices. In 2-d, extreme points are in counter-clockwise order.
- Fv
- list vertices for each facet. The first line is the number of facets. Each remaining line starts with the number of vertices. For the cube example, each facet has four vertices.
- i
- list vertices for each facet. The first line is the number of facets. The remaining lines list the vertices for each facet. The facets are oriented. In 4-d and higher, triangulate non-simplicial facets by adding an extra point.
- Coordinates
- o
- print vertices and facets of the convex hull in OFF format. The first line is the dimension. The second line is the number of vertices, facets, and ridges. The vertex coordinates are next, followed by the facets. Each facet starts with the number of vertices. Simplicial and 3-d facets are oriented. The cube example has four vertices per facet.
- Ft
- print a triangulation of the convex hull in OFF format. The first line is the dimension. The second line is the number of vertices and added points, followed by the number of facets and the number of ridges. The vertex coordinates are next, followed by the centrum coordinates. There is one centrum for each non-simplicial facet. The cube example has six centrums, one per square. Each facet starts with the number of vertices or centrums. In the cube example, each facet uses two vertices and one centrum.
- p
- print vertex coordinates. The first line is the dimension and the second line is the number of vertices. The following lines are the coordinates of each vertex. The cube example has eight vertices.
- Qc p
- print coordinates of vertices and coplanar points. The first line is the dimension. The second line is the number of vertices and coplanar points. The coordinates are next, one line per point. Use 'Qc Qi p' to print the coordinates of all points.
- Facets
- Fn
- list neighboring facets for each facet. The first line is the number of facets. Each remaining line starts with the number of neighboring facets. The cube example has four neighbors per facet.
- FN
- list neighboring facets for each point. The first line is the total number of points. Each remaining line starts with the number of neighboring facets. Each vertex of the cube example has three neighboring facets. Use 'Qc Qi FN' to include coplanar and interior points.
- Fa
- print area for each facet. The first line is the number of facets. Facet area follows, one line per facet. For the cube example, each facet has area one.
- FI
- list facet IDs. The first line is the number of facets. The IDs follow, one per line.
- Coplanar and interior points
- Fc
- list coplanar points for each facet. The first line is the number of facets. The remaining lines start with the number of coplanar points. A coplanar point is assigned to one facet.
- Qi Fc
- list interior points for each facet. The first line is the number of facets. The remaining lines start with the number of interior points. A coplanar point is assigned to one facet.
- FP
- print distance to nearest vertex for coplanar points. The first line is the number of coplanar points. Each remaining line starts with the point ID of a vertex, followed by the point ID of a coplanar point, its facet, and distance. Use 'Qc Qi FP' for coplanar and interior points.
- Hyperplanes
- n
- print hyperplane for each facet. The first line is the dimension. The second line is the number of facets. Each remaining line is the hyperplane's coefficients followed by its offset.
- Fo
- print outer plane for each facet. The output plane is above all points. The first line is the dimension. The second line is the number of facets. Each remaining line is the outer plane's coefficients followed by its offset.
- Fi
- print inner plane for each facet. The inner plane of a facet is below its vertices. The first line is the dimension. The second line is the number of facets. Each remaining line is the inner plane's coefficients followed by its offset.
- General
- s
- print summary for the convex hull. Use 'Fs' and 'FS' if you need numeric data.
- FA
- compute total area and volume for 's' and 'FS'
- m
- Mathematica output for the convex hull in 2-d or 3-d.
- FM
- Maple output for the convex hull in 2-d or 3-d.
- G
- Geomview output for the convex hull in 2-d, 3-d, or 4-d.
- Scaling and rotation
- Qbk:n
- scale k'th coordinate to lower bound.
- QBk:n
- scale k'th coordinate to upper bound.
- QbB
- scale input to unit cube centered at the origin.
- QRn
- randomly rotate the input with a random seed of n. If n=0, the seed is the time. If n=-1, use time for the random seed, but do not rotate the input.
- Qbk:0Bk:0
- remove k'th coordinate from input. This computes the convex hull in one lower dimension.
These options provide additional control:
- Qt
- triangulated output. Qhull triangulates non-simplicial facets. It may produce degenerate facets of zero area.
- QJ
- joggle the input instead of merging facets. This guarantees simplicial facets (e.g., triangles in 3-d). It is less accurate than triangulated output ('Qt').
- Qc
- keep coplanar points
- Qi
- keep interior points
- f
- facet dump. Print the data structure for each facet.
- QVn
- select facets containing point n as a vertex,
- QGn
- select facets that are visible from point n (marked 'good'). Use -n for the remainder.
- PDk:0
- select facets with a negative coordinate for dimension k
- TFn
- report progress after constructing n facets
- Tv
- verify result
- TI file
- input data from file. The filename may not use spaces or quotes.
- TO file
- output results to file. Use single quotes if the filename contains spaces (e.g., TO 'file with spaces.txt'
- Qs
- search all points for the initial simplex. If Qhull can not construct an initial simplex, it reports a descriptive message. Usually, the point set is degenerate and one or more dimensions should be removed ('Qbk:0Bk:0'). If not, use option 'Qs'. It performs an exhaustive search for the best initial simplex. This is expensive is high dimensions.
Display 2-d, 3-d, and 4-d convex hulls with Geomview ('G').
Display 2-d and 3-d convex hulls with Mathematica ('m').
To view 4-d convex hulls in 3-d, use 'Pd0d1d2d3' to select the positive octant and 'GrD2' to drop dimension 2.
Qhull always computes a convex hull. The convex hull may be used for other geometric structures. The general technique is to transform the structure into an equivalent convex hull problem. For example, the Delaunay triangulation is equivalent to the convex hull of the input sites after lifting the points to a paraboloid.
The following terminology is used for convex hulls in Qhull. See Qhull's data structures.
- point - d coordinates
- vertex - extreme point of the input set
- ridge - d-1 vertices between two neighboring facets
- hyperplane - halfspace defined by a unit normal and offset
- coplanar point - a nearly incident point to a hyperplane
- centrum - a point on the hyperplane for testing convexity
- facet - a facet with vertices, ridges, coplanar points, neighboring facets, and hyperplane
- simplicial facet - a facet with d vertices, d ridges, and d neighbors
- non-simplicial facet - a facet with more than d vertices
- good facet - a facet selected by 'QVn', etc.
qconvex -- compute the convex hull http://www.qhull.org input (stdin): first lines: dimension and number of points (or vice-versa). other lines: point coordinates, best if one point per line comments: start with a non-numeric character options: Qc - keep coplanar points with nearest facet Qi - keep interior points with nearest facet QJ - joggled input instead of merged facets Qt - triangulated output Qhull control options: Qa - allow input with fewer or more points than coordinates Qbk:n - scale coord k so that low bound is n QBk:n - scale coord k so that upper bound is n (QBk is 0.5) QbB - scale input to unit cube centered at the origin Qbk:0Bk:0 - remove k-th coordinate from input QJn - randomly joggle input in range [-n,n] QRn - random rotation (n=seed, n=0 time, n=-1 time/no rotate) Qs - search all points for the initial simplex Qhull extra options: QGn - good facet if visible from point n, -n for not visible QVn - good facet if it includes point n, -n if not Qw - allow option warnings Q12 - allow wide facets and wide dupridge Q14 - merge pinched vertices that create a dupridge T options: TFn - report summary when n or more facets created TI file - input file, may be enclosed in single quotes TO file - output file, may be enclosed in single quotes Ts - statistics Tv - verify result: structure, convexity, and in-circle test Tz - send all output to stdout Trace options: T4 - trace at level n, 4=all, 5=mem/gauss, -1= events Ta - annotate output with message codes TAn - stop qhull after adding n vertices TCn - stop qhull after building cone for point n TVn - stop qhull after adding point n, -n for before Tc - check frequently during execution Tf - flush each qh_fprintf for debugging segfaults TPn - turn on tracing when point n added to hull TMn - turn on tracing at merge n TWn - trace merge facets when width > n Precision options: Cn - radius of centrum (roundoff added). Merge facets if non-convex An - cosine of maximum angle. Merge facets if cosine > n or non-convex C-0 roundoff, A-0.99/C-0.01 pre-merge, A0.99/C0.01 post-merge Rn - randomly perturb computations by a factor of [1-n,1+n] Un - max distance below plane for a new, coplanar point Wn - min facet width for outside point (before roundoff) Output formats (may be combined; if none, produces a summary to stdout): f - facet dump G - Geomview output (see below) i - vertices incident to each facet m - Mathematica output (2-d and 3-d) n - normals with offsets o - OFF file format (dim, points and facets) p - point coordinates s - summary (stderr) More formats: Fa - area for each facet FA - compute total area and volume for option 's' Fc - count plus coplanar points for each facet use 'Qc' (default) for coplanar and 'Qi' for interior FC - centrum for each facet Fd - use cdd format for input (homogeneous with offset first) FD - use cdd format for numeric output (offset first) FF - facet dump without ridges Fi - inner plane for each facet FI - ID for each facet Fm - merge count for each facet (511 max) FM - Maple output (2-d and 3-d) Fn - count plus neighboring facets for each facet FN - count plus neighboring facets for each point Fo - outer plane (or max_outside) for each facet FO - options and precision constants FP - nearest vertex for each coplanar point FQ - command used for qconvex Fs - summary: #int (8), dimension, #points, tot vertices, tot facets, output: #vertices, #facets, #coplanars, #nonsimplicial #real (2), max outer plane, min vertex FS - sizes: #int (0) #real (2) tot area, tot volume Ft - triangulation with centrums for non-simplicial facets (OFF format) Fv - count plus vertices for each facet FV - average of vertices (a feasible point for 'H') Fx - extreme points (in order for 2-d) Geomview output (2-d, 3-d, and 4-d) Ga - all points as dots Gp - coplanar points and vertices as radii Gv - vertices as spheres Gc - centrums GDn - drop dimension n in 3-d and 4-d output Gh - hyperplane intersections Gi - inner planes only Gn - no planes Go - outer planes only Gr - ridges Print options: PAn - keep n largest facets by area Pdk:n - drop facet if normal[k] <= n (default 0.0) PDk:n - drop facet if normal[k] >= n PFn - keep facets whose area is at least n Pg - print good facets (needs 'QGn' or 'QVn') PG - print neighbors of good facets PMn - keep n facets with most merges Po - force output. If error, output neighborhood of facet Pp - do not report precision problems . - list of all options - - one line descriptions of all options -? - help with examples -V - version
Up: Home page for Qhull (local)
Up: Qhull manual: contents
To: Programs
Options
Output
Formats
Geomview
Print
Qhull
Precision
Trace
Functions (local)
To: synopsis
input outputs
controls graphics
notes conventions
options
Comments to: qhull@qhull.org
Created: Sept. 25, 1995 --- Last modified: see top