A pseudo-random number generator that allows for quasi-random access, arbitrarily large seeds and arbitrarily-complex mutations from number to number. No attention has been paid to whether or not this is cryptographically-secure. The intention is to support procedural generation of content in video games.
$ dotnet add package HexagonSoftware.AddressableNoiseAddressable Noise is a tool for generating repeatable, random-seeming noise of arbitrary structure with a logarithmic seek time.
The primary entity is an implementation of NoiseMap<AddressType, ProductType>. A noise map represents the an entire space of
addressable noise. While the space appears to contain random values, the value at any given address is always the same.
The contents of NoiseMap can be accessed with instances of NoiseReader<AddressType, ProductType>. Noise maps represent the space,
itself. Noise readers represent a stream of points within the noise map space.
The easiest way to create a noise map is to use the StandardNoiseMapBuilder32 or StandardNoiseMapBuild64 classes. These generate
noise maps that use uint or ulong (respectively) addresses and products. The noise map readers they produce assume generally
incremental access and are optimized for that assumption, although skipping around (like skipping thousands or millions of addresses),
are still very fast (logarithmic time).
If a single-axis domain is insufficient, you can use the Cross<,,>() exension method to combine the readers of multiple noise maps,
producing reader that mixes noise from the two spaces orthogonally.
The system is fairly extensible. You can supply other bit-widths and use different kinds of products and addresses, if you like.