## MiniQhull.jl

A small Julia wrapper of the Qhull library
Author gridap
Popularity
29 Stars
Updated Last
6 Months Ago
Started In
February 2020

# MiniQhull

MiniQhull (Qhull-based Delaunay triangulation).

## Documentation

The `MiniQhull` julia package provides a single function `delaunay` overloaded with 3 methods:

`delaunay(dim::Integer, numpoints::Integer, points::AbstractVector) -> Matrix{Int32}`

Compute the Delaunay triangulation of a cloud of points in an arbitrary dimension `dim`. The length of vector `points` must be `dim*numpoints`. Vector `points` holds data in "component major order", i.e., components are consequitive within the vector. The returned matrix has shape `(dim+1, nsimplices)`, where `nsimplices` is the number of simplices in the computed Delaunay triangulation.

`delaunay(points::AbstractMatrix) -> Matrix{Int32}`

In this variant, the cloud of points is specified by a matrix with `size(matrix) == (dim, numpoints)`.

`delaunay(points::AbstractVector) -> Matrix{Int32}`

In this variant, the cloud of points is specified with a vector of `dim`-element vectors or tuples. It is also possible to use a vector of other tuple-like types, like `SVector` from StaticArrays.jl.

You can override the default set of flags that Qhull uses by passing an additional `flags` argument:

```delaunay(dim::Integer, numpoints::Integer, points::AbstractVector, flags::AbstractString) -> Matrix{Int32}
delaunay(points::AbstractMatrix, flags::AbstractString) -> Matrix{Int32}
delaunay(points::AbstractVector, flags::AbstractString) -> Matrix{Int32}```

The default set of flags is `qhull d Qt Qbb Qc Qz` for up to 3 dimensions, and `qhull d Qt Qbb Qc Qx` for higher dimensions. The flags you pass override the default flags, i.e. you have to pass all the flags that Qhull should use.

## Examples

```using MiniQhull
dim          = 2
numpoints    = 4
coordinates  = [0,0,0,1,1,0,1,1]
connectivity = delaunay(dim, numpoints, coordinates)
# output
3×2 Array{Int32,2}:
4  4
2  3
1  1```
```using MiniQhull
coordinates  = [0 0 1 1; 0 1 0 1]
connectivity = delaunay(coordinates)
# output
3×2 Array{Int32,2}:
4  4
2  3
1  1```
```using MiniQhull, StaticArrays
dim = 5
npts = 500
pts = [SVector{dim, Float64}(rand(dim)) for i = 1:npts];
flags = "qhull d Qbb Qc QJ Pp" # custom flags
connectivity = delaunay(pts, flags)```

## Installation

`MiniQhull` is a registered Julia package. `MiniQhull` can be installed using the command:

``````pkg> add MiniQhull
``````

`MiniQhull` depends two binary dependencies which are build for all Platforms by BinaryBuilder:

### Required Packages

No packages found.