perlin_noise 0.1.2 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 3d56e10274a7cddb359c2d92a70d74d9324284c004b5a9c4d597797fbfa6cc65
4
+ data.tar.gz: 84342c319a311ff1ced6309f886f6b96851da235d29afc1a278c9e6b15c72611
5
+ SHA512:
6
+ metadata.gz: 566092bd6aa5f67be9573df008a57b8af1a2098161bd006b502468e6646e80724a0a25e983196ce212ece258c7af67f49e5c0532a6da473ad01548cba35bf7f6
7
+ data.tar.gz: f0ae7777466b432346ddfc612e70a775eeffd2ae53fb7dc06bc5d74392b03c75b3dde8817098dc8df63d398ff3e6f9b7edb8b7e30076410be3d75bda2b053b95
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2016 Junegunn Choi
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
@@ -58,16 +58,16 @@ noises = Perlin::Noise.new 1, :seed => 12345
58
58
  ```
59
59
 
60
60
  ## Range of noise function
61
- While the original algorithm outputs a number between -1.0 and 1.0,
61
+ While the original algorithm outputs a number between -1.0 and 1.0,
62
62
  Perlin::Noise#[] manipulates this output and returns a number between 0.0 and 1.0 for ease of use.
63
63
  Thus, noise values at all of the integer lattice points should be 0.5, not 0.
64
64
 
65
65
  ## Increasing the contrast
66
- Even though the range of the noise function is from 0 to 1,
67
- you'll rarely see a noise value close to either end,
66
+ Even though the range of the noise function is from 0 to 1,
67
+ you'll rarely see a noise value close to either end,
68
68
  as most of the values are distributed around the center.
69
- You might want to apply S-shaped curve functions defined in Perlin::Curve module
70
- one or more times to push away those "grey" values to either end,
69
+ You might want to apply S-shaped curve functions defined in Perlin::Curve module
70
+ one or more times to push away those "grey" values to either end,
71
71
  achiving more contrasted output.
72
72
 
73
73
  ```ruby
@@ -242,7 +242,7 @@ noises = Perlin::Noise.new(2)
242
242
  contrast = Perlin::Curve.contrast(Perlin::Curve::CUBIC, 2)
243
243
 
244
244
  bars = " ▁▂▃▄▅▆▇█".each_char.to_a
245
- bar = lambda { |n|
245
+ bar = lambda { |n|
246
246
  bars[ (bars.length * n).floor ]
247
247
  }
248
248
 
@@ -312,8 +312,8 @@ end
312
312
  ▃▄▄▅▄▄▃▂▂▃▃▄▄▄▄▃▃▂▃▃▄▅▆▇███▇▇▆▆▆▅▄▃▂▁▂▂▃▄▄▅▆▇▇▇▇▆▆▅▅▄▃▃▃▃▃▄▅▆▆▇▇▇▆▅▄▃▂
313
313
  ▂▃▄▄▄▄▃▃▃▃▃▄▄▄▃▃▃▃▃▄▅▆▇▇█████▇▇▇▆▅▄▃▃▂▃▃▄▄▅▆▇▇▇▆▆▅▅▅▄▃▃▃▃▄▅▅▆▇▇▇▇▆▅▃▂▁
314
314
  ▂▃▃▄▄▄▄▃▃▃▃▄▄▃▃▃▃▃▄▄▅▆▇████████▇▇▆▆▅▄▄▄▄▄▅▅▅▆▆▆▆▅▅▄▄▄▃▃▃▃▄▅▆▆▇▇▇▇▆▄▂▁▁
315
- ▂▂▃▄▅▅▅▄▄▄▄▄▃▃▃▃▃▃▄▅▆▆▇██████████▇▇▆▆▅▅▅▅▅▅▅▅▅▅▄▄▄▄▃▃▃▃▃▃▄▅▆▆▇▇▇▆▅▃▂▁
316
- ▂▂▃▅▅▆▆▆▅▅▄▄▃▃▂▂▃▃▄▅▆▇▇▇██████████▇▇▇▆▆▅▅▅▄▄▄▃▃▃▃▃▃▃▃▂▂▂▃▃▄▅▆▇▇▇▆▅▃▂▁
315
+ ▂▂▃▄▅▅▅▄▄▄▄▄▃▃▃▃▃▃▄▅▆▆▇██████████▇▇▆▆▅▅▅▅▅▅▅▅▅▅▄▄▄▄▃▃▃▃▃▃▄▅▆▆▇▇▇▆▅▃▂▁
316
+ ▂▂▃▅▅▆▆▆▅▅▄▄▃▃▂▂▃▃▄▅▆▇▇▇██████████▇▇▇▆▆▅▅▅▄▄▄▃▃▃▃▃▃▃▃▂▂▂▃▃▄▅▆▇▇▇▆▅▃▂▁
317
317
  ▂▃▄▅▆▇▇▆▆▅▅▄▃▂▂▂▂▃▄▅▆▆▇▇▇▇▇▇▇▇▇▇▇██▇▇▇▆▆▅▅▄▃▃▂▂▂▂▂▃▃▂▂▂▂▂▃▃▄▅▆▇▇▆▅▃▂▁▁
318
318
  ▃▄▅▆▇▇▇▇▆▅▅▄▃▂▁▁▂▃▄▅▅▆▆▇▇▇▆▆▆▆▆▆▇▇▇▇▇▇▆▆▅▄▃▃▂▂▂▂▂▂▃▃▂▂▂▂▂▂▃▄▅▆▆▆▆▅▄▃▂▂
319
319
  ▃▄▅▆▇▇▇▇▆▅▄▃▂▂▁▁▁▂▃▄▅▅▆▆▆▆▅▅▅▅▅▅▆▇▇▇▇▇▆▅▅▄▃▂▂▂▂▂▃▃▃▃▃▃▂▂▂▂▂▃▄▅▆▆▆▅▅▄▃▃
@@ -342,7 +342,7 @@ end
342
342
  ▃▃▂▃▃▄▅▆▆▅▅▄▃▃▃▃▃▃▃▃▂▂▁ ▁▂▃▃▄▅▆▆▆▅▄▄▃▃▂▂▂▂▂▂▂▂▂▂▂▂▁▁▁▁▁▁▂▃▄▅▅▆▅▄▄▃▂
343
343
  ▄▃▂▃▃▄▅▆▆▆▅▄▄▃▃▃▃▃▂▂▁▁ ▁▂▃▃▄▅▅▅▅▅▄▃▃▃▂▂▂▁▁▁▁▁▁▁▁▁▁ ▁▁▂▂▃▄▅▅▄▃▂▂▁
344
344
  ▄▃▃▃▄▅▆▆▇▇▆▅▅▄▄▃▃▂▂▁▁▁ ▁▁▂▃▃▄▄▅▅▅▅▄▄▃▃▃▂▁▁▁ ▁▁▁▁▁ ▁▁▂▃▃▄▄▄▃▂▁▁
345
- ▄▄▃▃▄▅▆▇▇▇▆▆▅▅▄▄▃▂▂▁▁ ▁▁▂▃▃▄▄▄▄▄▅▅▅▄▄▄▃▃▂▁▁ ▁▁▁▁▁ ▁▁▂▂▃▄▄▃▃▂▁
345
+ ▄▄▃▃▄▅▆▇▇▇▆▆▅▅▄▄▃▂▂▁▁ ▁▁▂▃▃▄▄▄▄▄▅▅▅▄▄▄▃▃▂▁▁ ▁▁▁▁▁ ▁▁▂▂▃▄▄▃▃▂▁
346
346
  ▅▄▄▄▄▅▆▆▇▇▇▆▆▅▅▄▃▃▂▁▁▁ ▁▂▂▃▄▄▄▃▃▃▄▄▅▅▅▅▄▄▃▂▁▁ ▁▁▁▁▁▁▁▁▁▁▁▂▂▃▄▄▄▃▂▁▁
347
347
  ▅▄▄▄▄▄▅▆▇▇▆▆▆▆▅▅▄▃▃▂▁▁▁▁▂▃▄▄▅▅▄▃▃▃▃▄▅▅▆▅▅▄▄▂▁▁ ▁▁▂▂▂▂▂▂▁▁▁▁▂▃▄▄▅▄▄▃▂▁
348
348
  ▅▄▄▃▃▄▅▅▆▆▆▆▆▅▅▅▅▄▄▃▂▂▂▂▃▄▅▅▅▅▄▃▃▃▃▄▅▅▆▆▅▅▄▂▂▁▁▁▁▂▂▃▃▃▃▂▂▂▂▂▃▃▄▅▅▅▅▄▃▂
@@ -487,6 +487,10 @@ end
487
487
 
488
488
  - [Matthew Johnston](https://github.com/warmwaffles)
489
489
 
490
+ ## License
491
+
492
+ [MIT](LICENSE)
493
+
490
494
  ## References
491
495
  - Texturing & modeling: a procedural approach by David S. Ebert et al.
492
496
  - Improving Noise by Ken Perlin (http://mrl.nyu.edu/~perlin/paper445.pdf)
@@ -1,15 +1,17 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Perlin
2
4
  module Curve
3
5
  LINEAR = proc { |t| t }
4
- CUBIC = proc { |t| 3 * (t ** 2) - 2 * (t ** 3) }
5
- QUINTIC = proc { |t| 6 * (t ** 5) - 15 * (t ** 4) + 10 * (t ** 3) }
6
+ CUBIC = proc { |t| 3 * (t**2) - 2 * (t**3) }
7
+ QUINTIC = proc { |t| 6 * (t**5) - 15 * (t**4) + 10 * (t**3) }
6
8
 
7
9
  # Returns a Proc object which applies S-curve function to
8
10
  # a given number between 0 and 1.
9
11
  # @param[Proc] curve
10
- # @param[Fixnum] times
12
+ # @param[Integer] times
11
13
  # @return[Proc]
12
- def self.contrast curve, times
14
+ def self.contrast(curve, times)
13
15
  lambda { |n|
14
16
  times.times do
15
17
  n = curve.call n
@@ -1,13 +1,15 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Perlin
2
4
  if RUBY_VERSION =~ /^1\.8\./
3
5
  class Random
4
- def initialize *seed
6
+ def initialize(*seed)
5
7
  # FIXME: Sets the global seed value; this is misleading
6
8
  srand *seed
7
9
  end
8
10
 
9
- def rand *interval
10
- Kernel.rand *interval
11
+ def rand(*interval)
12
+ Kernel.rand(*interval)
11
13
  end
12
14
  end
13
15
  else
@@ -26,13 +28,14 @@ module Perlin
26
28
  @vectors = Array.new(interval) { random_unit_vector }
27
29
  end
28
30
 
29
- def [] *coords
30
- @vectors[index *coords]
31
+ def [](*coords)
32
+ @vectors[index(*coords)]
31
33
  end
32
34
 
33
- private
35
+ private
36
+
34
37
  # A simple hashing
35
- def index *coords
38
+ def index(*coords)
36
39
  s = coords.last
37
40
  coords.reverse[1..-1].each do |c|
38
41
  s = perm(s) + c
@@ -40,17 +43,17 @@ module Perlin
40
43
  perm(s)
41
44
  end
42
45
 
43
- def perm s
46
+ def perm(s)
44
47
  @table[s % @interval]
45
48
  end
46
49
 
47
50
  def random_unit_vector
48
51
  while true
49
52
  v = Vector[*Array.new(@dim) { @random.rand * 2 - 1 }]
50
- # Discards vectors whose length greater than 1 to avoid bias in distribution
53
+ # Discards vectors whose length greater than 1 to avoid bias in
54
+ # distribution
51
55
  break if v.r > 0 && v.r <= 1
52
56
  end
53
- r = v.r
54
57
  v.map { |e| e / v.r }
55
58
  end
56
59
  end
@@ -6,7 +6,7 @@ module Perlin
6
6
  :seed => nil
7
7
  }
8
8
 
9
- def initialize dim, options = {}
9
+ def initialize(dim, options = {})
10
10
  options = DEFAULT_OPTIONS.merge options
11
11
 
12
12
  @dim = dim
@@ -14,10 +14,10 @@ module Perlin
14
14
  @curve = options.fetch(:curve)
15
15
  @seed = options.fetch(:seed)
16
16
 
17
- raise ArgumentError.new("Invalid dimension: must be a positive integer") unless @dim.is_a?(Fixnum) && @dim > 0
18
- raise ArgumentError.new("Invalid interval: must be a positive integer") unless @interval.is_a?(Fixnum) && @interval > 0
19
- raise ArgumentError.new("Invalid curve specified: must be a Proc object") unless @curve.is_a?(Proc)
20
- raise ArgumentError.new("Invalid seed: must be a number") unless @seed.nil? || @seed.is_a?(Numeric)
17
+ raise ArgumentError.new('Invalid dimension: must be a positive integer') unless @dim.is_a?(Integer) && @dim > 0
18
+ raise ArgumentError.new('Invalid interval: must be a positive integer') unless @interval.is_a?(Integer) && @interval > 0
19
+ raise ArgumentError.new('Invalid curve specified: must be a Proc object') unless @curve.is_a?(Proc)
20
+ raise ArgumentError.new('Invalid seed: must be a number') unless @seed.nil? || @seed.is_a?(Numeric)
21
21
 
22
22
  # Generate pseudo-random gradient vector for each grid point
23
23
  @gradient_table = Perlin::GradientTable.new @dim, @interval, @seed
@@ -25,7 +25,7 @@ module Perlin
25
25
 
26
26
  # @param [*coords] Coordinates
27
27
  # @return [Float] Noise value between (-1..1)
28
- def [] *coords
28
+ def [](*coords)
29
29
  raise ArgumentError.new("Invalid coordinates") unless coords.length == @dim
30
30
 
31
31
  coords = Vector[*coords]
@@ -40,7 +40,7 @@ module Perlin
40
40
  # "The value of each gradient ramp is computed by means of a scalar
41
41
  # product (dot product) between the gradient vectors of each grid point
42
42
  # and the vectors from the grid points."
43
- gv = @gradient_table[ * (cell + idx).to_a ]
43
+ gv = @gradient_table[*(cell + idx).to_a]
44
44
  nf[idx.to_a] = gv.inner_product(diff - idx)
45
45
  end
46
46
 
@@ -63,12 +63,13 @@ module Perlin
63
63
  (nf[[]] + 1) * 0.5
64
64
  end
65
65
 
66
- private
67
- def iterate dim, length, &block
66
+ private
67
+
68
+ def iterate(dim, length, &block)
68
69
  iterate_recursive dim, length, Array.new(dim, 0), &block
69
70
  end
70
71
 
71
- def iterate_recursive dim, length, idx, &block
72
+ def iterate_recursive(dim, length, idx, &block)
72
73
  length.times do |i|
73
74
  idx[dim - 1] = i
74
75
  if dim == 1
@@ -78,6 +79,5 @@ module Perlin
78
79
  end
79
80
  end
80
81
  end
81
- end#Noise
82
- end#Perlin
83
-
82
+ end
83
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Perlin
2
- VERSION = "0.1.2"
4
+ VERSION = '0.1.3'
3
5
  end
@@ -1,7 +1,8 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'rubygems'
2
4
  require 'matrix'
3
5
  require 'perlin/version'
4
6
  require 'perlin/curve'
5
7
  require 'perlin/gradient_table'
6
8
  require 'perlin/noise'
7
-
@@ -8,6 +8,7 @@ Gem::Specification.new do |s|
8
8
  s.authors = ["Junegunn Choi"]
9
9
  s.email = ["junegunn.c@gmail.com"]
10
10
  s.homepage = "https://github.com/junegunn/perlin_noise"
11
+ s.license = 'MIT'
11
12
  s.summary = %q{Perlin noise generator}
12
13
  s.description = %q{Perlin noise implemented in Ruby}
13
14
 
metadata CHANGED
@@ -1,15 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: perlin_noise
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
5
- prerelease:
4
+ version: 0.1.3
6
5
  platform: ruby
7
6
  authors:
8
7
  - Junegunn Choi
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2012-07-22 00:00:00.000000000 Z
11
+ date: 2018-04-08 00:00:00.000000000 Z
13
12
  dependencies: []
14
13
  description: Perlin noise implemented in Ruby
15
14
  email:
@@ -18,8 +17,9 @@ executables: []
18
17
  extensions: []
19
18
  extra_rdoc_files: []
20
19
  files:
21
- - .gitignore
20
+ - ".gitignore"
22
21
  - Gemfile
22
+ - LICENSE
23
23
  - README.markdown
24
24
  - Rakefile
25
25
  - lib/perlin/curve.rb
@@ -30,28 +30,28 @@ files:
30
30
  - perlin_noise.gemspec
31
31
  - test/test_perlin.rb
32
32
  homepage: https://github.com/junegunn/perlin_noise
33
- licenses: []
33
+ licenses:
34
+ - MIT
35
+ metadata: {}
34
36
  post_install_message:
35
37
  rdoc_options: []
36
38
  require_paths:
37
39
  - lib
38
40
  required_ruby_version: !ruby/object:Gem::Requirement
39
- none: false
40
41
  requirements:
41
- - - ! '>='
42
+ - - ">="
42
43
  - !ruby/object:Gem::Version
43
44
  version: '0'
44
45
  required_rubygems_version: !ruby/object:Gem::Requirement
45
- none: false
46
46
  requirements:
47
- - - ! '>='
47
+ - - ">="
48
48
  - !ruby/object:Gem::Version
49
49
  version: '0'
50
50
  requirements: []
51
51
  rubyforge_project: perlin
52
- rubygems_version: 1.8.24
52
+ rubygems_version: 2.7.4
53
53
  signing_key:
54
- specification_version: 3
54
+ specification_version: 4
55
55
  summary: Perlin noise generator
56
56
  test_files:
57
57
  - test/test_perlin.rb