Up: Qhull manual: contents
To: ProgramsOptionsOutputFormatsGeomviewPrintQhullPrecisionTraceFunctions (local)
To: synopsis • input • outputs • controls • graphics • notes • conventions • options

# qconvex -- convex hull

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.

### »qconvex synopsis

```qconvex -- compute the convex hull.
input (stdin): dimension, number of points, point coordinates

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
```

### »qconvex input

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.5
```

qconvex 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
```

### »qconvex outputs

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.

### »qconvex controls

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.

### »qconvex graphics

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.

### »qconvex notes

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.

### »qconvex conventions

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 options

```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

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:
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
```