Skip to content

cortesi/spacecurve

Repository files navigation

Discord

Hilbert curve

generated with: 'scurve allrgb hilbert'

A space-filling curve is a continuous surjection $f:[0,1]\to[0,1]^d$ for $d\ge 2$. In discrete spaces, this is an ordering of grid cells that visits every cell; some orderings preserve adjacency (e.g., Hilbert), while others trade adjacency for simplicity (e.g., Morton/Z-order).

This project contains implementations of various space-filling curves, plus tools for visualising and working with them.

spacecurve

crates.io docs.rs MIT

A Rust library for generating and working with space-filling curves.

// 2D Hilbert curve on an 8x8 grid (order 3)
let curve = spacecurve::curve_from_name("hilbert", 2, 8)?;
println!(
    "{}D Hilbert length: {} cells",
    curve.dimensions(),
    curve.length()
);

let index = 10;
let point = curve.point(index);
println!("Point at index {index}: {:?}", point);

let round_trip = curve.index(&point);
println!("Index for {:?}: {round_trip}", point);

assert_eq!(round_trip, index);

scurve

crates.io MIT

A command-line tool and GUI for generating images of space-filling curves.

Install with:

cargo install scurve

playground

A GUI for visualising space-filling curves and their properties, written in Rust with egui and compiled to WebAssembly.

Space-filling curve viewer

related blog posts

Development on spacecurve (and its ancestors) is usually spurred along by posts on my blog. Some of spacecurve's features are documented and illustrated in the following posts:

community

Want to contribute? Have ideas or feature requests? Come tell me about it on Discord.

About

A library for drawing space-filling curves like the Hilbert Curve.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published