libnoise 1.2.0

A simple, performant, and customizable procedural noise generation library.
Documentation
use libnoise::prelude::*;

fn main() {
    example_custom_noise1d();
    example_custom_noise2d();
    example_custom_noise3d();
    example_custom_noise4d();
}

fn example_custom_noise1d() {
    let generator = Source::custom(|[x]| (-(x * x)).exp() * 2.0 - 1.0).scale([0.003; 1]);
    Visualizer::<1>::new([100], &generator)
        .write_to_file("custom_1d.png")
        .unwrap();
}

fn example_custom_noise2d() {
    let generator =
        Source::custom(|[x, y]| (-(x * x) - (y * y)).exp() * 2.0 - 1.0).scale([0.003; 2]);
    Visualizer::<2>::new([1000, 1000], &generator)
        .write_to_file("custom_2d.png")
        .unwrap();
}

fn example_custom_noise3d() {
    let generator = Source::custom(|[x, y, z]| (-(x * x) - (y * y) - (z * z)).exp() * 2.0 - 1.0)
        .scale([0.007; 3]);
    Visualizer::<3>::new([200, 200, 200], &generator)
        .write_to_file("custom_3d.png")
        .unwrap();
}

fn example_custom_noise4d() {
    let generator = Source::custom(|[x, y, z, w]| {
        (-(x * x) - (y * y) - (z * z) - (w * w) * 2.0 - 1.0).exp() * 2.0 - 1.0
    })
    .scale([0.021; 4]);
    Visualizer::<4>::new([60, 60, 60, 60], &generator)
        .write_to_file("custom_4d.gif")
        .unwrap();
}