[go: up one dir, main page]

noise 0.9.0

Procedural noise generation library.
Documentation
use crate::math::vectors::{Vector2, Vector3, Vector4};

macro_rules! impl_sphere {
    ($name:ident, $vector:ty) => {
        #[inline(always)]
        pub fn $name(point: $vector, frequency: f64) -> f64 {
            let point = point * frequency;

            let dist_from_center = point.magnitude();

            let dist_from_smaller_sphere = dist_from_center - dist_from_center.floor();
            let dist_from_larger_sphere = 1.0 - dist_from_smaller_sphere;
            let nearest_dist = dist_from_smaller_sphere.min(dist_from_larger_sphere);

            1.0 - (nearest_dist * 4.0)
        }
    };
}

impl_sphere!(spheres_2d, Vector2<f64>);
impl_sphere!(spheres_3d, Vector3<f64>);
impl_sphere!(spheres_4d, Vector4<f64>);