KiCad PCB EDA Suite
PerlinNoise.h
Go to the documentation of this file.
1 /*
2  * This program source code file is part of KiCad, a free EDA CAD application.
3  *
4  * Copyright (C) 2016 Mario Luzeiro <mrluzeiro@ua.pt>
5  * Copyright (C) 1992-2016 KiCad Developers, see AUTHORS.txt for contributors.
6  *
7  * This program is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License
9  * as published by the Free Software Foundation; either version 2
10  * of the License, or (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, you may find one here:
19  * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
20  * or you may search the http://www.gnu.org website for the version 2 license,
21  * or you may write to the Free Software Foundation, Inc.,
22  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
23  */
24 
43 #include <vector>
44 
45 // THIS CLASS IS A TRANSLATION TO C++11 FROM THE REFERENCE
46 // JAVA IMPLEMENTATION OF THE IMPROVED PERLIN FUNCTION (see http://mrl.nyu.edu/~perlin/noise/)
47 // THE ORIGINAL JAVA IMPLEMENTATION IS COPYRIGHT 2002 KEN PERLIN
48 
49 // I ADDED AN EXTRA METHOD THAT GENERATES A NEW PERMUTATION VECTOR
50 // (THIS IS NOT PRESENT IN THE ORIGINAL IMPLEMENTATION)
51 
52 #ifndef PERLINNOISE_H
53 #define PERLINNOISE_H
54 
56 {
57  // The permutation vector
58  std::vector<int> p;
59 
60 public:
61  // Initialize with the reference values for the permutation vector
62  PerlinNoise();
63 
64  // Generate a new permutation vector based on the value of seed
65  PerlinNoise( unsigned int seed );
66 
67  // Returns between 0.0f and 1.0f
68  float noise( float x, float y, float z ) const;
69  float noise( float x, float y ) const;
70 
71 private:
72  float fade( float t ) const;
73  float lerp( float t, float a, float b ) const;
74  float grad( int hash, float x, float y, float z ) const;
75  float grad( int hash, float x, float y ) const;
76 };
77 
78 #endif
std::vector< int > p
Definition: PerlinNoise.h:58
float lerp(float t, float a, float b) const
float fade(float t) const
float grad(int hash, float x, float y, float z) const
float noise(float x, float y, float z) const
Definition: PerlinNoise.cpp:97