simple-simplex 1.0.3

Generates 2d simplex noise values and applies Fractal Brownian Motion.
Documentation
# Simplex Noise Generator and Fractal Brownian Motion algorithm. 

Import with `use simple_simplex::NoiseConfig;`

Simple-Simplex is a library for generating values procedurally.  This is called `noise`.

Simple-Simplex also applies what is called `Fractal Brownian Motion`, or `FBM` to generated values. 

When many of these `noise` values are generated and put into an array/list/vector, they are called `noisemaps`. Noisemaps can be used for many things,
such as generating images, terrain in games like No Mans Sky / Minecraft, particle effects, digital art, or even procedurally generated dungeons. 

Simple-Simplex supports..

- generating noise values, applying fractal brownian motion, and converting the output into a range. 

- generating noise values without fractal brownian motion or without a range. 

- outputting Simplex Noise / FBM values directly to terminal in ascii with the `output()` and `output_1d()` methods. 

Below: Example of the `output()` method, sent in the VS Code terminal. 
![An example of output().](/images/sadtkj.png "Output Example")

Below: Example of the `output_1d()` method, sent in the VS Code Terminal. 
![An example of output_1d().](/images/thingafication.png "Output_1d Example")

`output()` and `output_1d()` allow users to understand what their final noisemap will look like for a given noise. 

# Quick-Start Guide

If you do not already understand the terms `FBM`, `Fractal Brownian Motion`, `noise`, `Simplex Noise`, or `noisemap`, I suggest you read
TERMSNDEF.md in /docs. 

This section will help you get started using simple-simplex

### 1: Create a Noise Configuration. 

simple-simplex uses what is called a `Noise Configuration`. See the example below: 

```rs

    use simple_simplex::NoiseConfig;

    let config: NoiseConfig = NoiseConfig::new(
        3, // Octaves
        0.01, // X-Frequency
        0.01, // Y-Frequency
        0.05, // Amplitude
        2.5, // Lacunarity
        0.5, // Gain
        (0.0, 255.0), // range
        4201337 // seed
    );
```

In the above image, we are creating a new NoiseConfig.  a NoiseConfig contains data about how FBM will behave. 
For a more in depth explanation of how these variable behave, see NOISECONFIG.md in /docs. 

### 2: Generate values. 

Once a Noise Configuration has been created, you're ready to start generating values!

There are a few methods available to you right off the bat:

1. `config.generate_raw()`:

    Generates a *raw* simplex noise value. By raw we mean that FBM is not applied to the result. This is not converted into a range. 

2. `config.generate_raw_range()`:

    Generates a *raw* simplex noise value. This value does not have FBM applied. The value is converted to the range specified in the Noise Configuration. 

3. `config.generate_range()`:

    Generates an FBM-applied simplex noise value.  This means FBM is applied. This value is converted into the specified range. 

4. `config.generate_rangeless()`:

    Generates an FBM-applied simplex noise value. This means FBM is applied. This value is not converted into the specified range. 

5. `config.analyze()`:

    Generates a large amount of values and prints data about the configuration's output to terminal.  Currently feature-incomplete. 
    Prints:
    - Maximum Value data. 
    - Minimum Value data. 

6. `config.output()`:

    Generates and outputs a noisemap to terminal.  Note the `size` variable refers to both the width and the height of the outputted map. Be sure not to make the map
    too wide, or it will wrap your terminal window. 

    `output()` also needs a vector of ascii characters to output. Looks like this: 
    ```rs
    let vector: Vec<char> = vec![' ', '.', '-', '=', 'z','X', '#'];
    ```

    These characters are what the method will use to output. They must be in ascending or descending order.  

7. `config.output_1d()` 

    Generates and outputs a 1d noisemap to terminal.  Don't make the `height` variable too high. A good number is `30`. Be sure not to make the `length` variable too high, or else it will wrap the terminal window. 

Now you can start generating values! 

If you have any suggestions / bug reports / feature requests / etc, please submit them as an issue.