5 unstable releases

0.3.1 Feb 9, 2024
0.3.0 Feb 9, 2024
0.2.0 Feb 9, 2024
0.1.1 Feb 7, 2024
0.1.0 Feb 7, 2024

#323 in Math

35 downloads per month
Used in flowscad

MIT license

1MB
22K SLoC

C 21K SLoC // 0.3% comments Rust 1.5K SLoC // 0.0% comments Prolog 59 SLoC

qhull-rs

Safe Rust Qhull bindings

Crates.io Version Build Status docs.rs

Qhull computes the convex hull, Delaunay triangulation, Voronoi diagram, halfspace intersection about a point, furthest-site Delaunay triangulation, and furthest-site Voronoi diagram. The source code runs in 2-d, 3-d, 4-d, and higher dimensions. Qhull implements the Quickhull algorithm for computing the convex hull. It handles roundoff errors from floating point arithmetic. It computes volumes, surface areas, and approximations to the convex hull.

Qhull does not support triangulation of non-convex surfaces, mesh generation of non-convex objects, medium-sized inputs in 9-D and higher, alpha shapes, weighted Voronoi diagrams, Voronoi volumes, or constrained Delaunay triangulations.

    - Qhull main page (retrieved 2024-09-02)

Quick start

cargo run --example hull

Binaries

qhull-rs provides some binary targets from the original Qhull source code:

  • qconvex
  • qdelaunay
  • qhalf
  • qhull
  • qvoronoi
  • rbox

To get them:

cargo install qhull
qhull

Usage

Add this to your Cargo.toml:

qhull = "0.3"

For the current development version:

[dependencies]
qhull = { git = "https://github.com/LucaCiucci/qhull-rs" }

Example

A 2D convex hull:

use qhull::Qh;

let qh = Qh::builder()
    .compute(true)
    .build_from_iter([
        [0.0, 0.0],
        [1.0, 0.0],
        [0.0, 1.0],
        [0.25, 0.25],
    ]).unwrap();

for simplex in qh.simplices() {
    let vertices = simplex
        .vertices().unwrap()
        .iter()
        .map(|v| v.id())
        .collect::<Vec<_>>();

    println!("{:?}", vertices);
}

See the examples module/folder for more examples.

License

This crate uses Qhull, please refer to the Qhull license for more information when using this crate.

Dependencies

~0–2MB
~41K SLoC