perlin 0.1.0-x86-mingw32 → 0.1.1-x86-mingw32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Rakefile +0 -5
 - data/lib/perlin.rb +13 -0
 - data/lib/perlin/1.9/perlin.so +0 -0
 - data/lib/perlin/generator.rb +161 -0
 - data/lib/perlin/version.rb +5 -0
 - data/spec/helper.rb +4 -0
 - data/spec/perlin/generator_spec.rb +245 -0
 - metadata +9 -8
 
    
        data/Rakefile
    CHANGED
    
    | 
         @@ -45,11 +45,6 @@ task :browse_yard => :yard do 
     | 
|
| 
       45 
45 
     | 
    
         
             
              Launchy.open "doc/index.html" rescue nil
         
     | 
| 
       46 
46 
     | 
    
         
             
            end
         
     | 
| 
       47 
47 
     | 
    
         | 
| 
       48 
     | 
    
         
            -
            desc "Create platform-specific compiled gem"
         
     | 
| 
       49 
     | 
    
         
            -
            task :native_gem do
         
     | 
| 
       50 
     | 
    
         
            -
              Rake::Task["native"].invoke "gem"
         
     | 
| 
       51 
     | 
    
         
            -
            end
         
     | 
| 
       52 
     | 
    
         
            -
             
     | 
| 
       53 
48 
     | 
    
         
             
            desc "Run benchmarks"
         
     | 
| 
       54 
49 
     | 
    
         
             
            task :bench => :compile do
         
     | 
| 
       55 
50 
     | 
    
         
             
              require File.expand_path("../bench/benchmarks.rb", __FILE__)
         
     | 
    
        data/lib/perlin.rb
    ADDED
    
    
    
        data/lib/perlin/1.9/perlin.so
    CHANGED
    
    | 
         Binary file 
     | 
| 
         @@ -0,0 +1,161 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module Perlin
         
     | 
| 
      
 2 
     | 
    
         
            +
              # Perlin noise generator.
         
     | 
| 
      
 3 
     | 
    
         
            +
              #
         
     | 
| 
      
 4 
     | 
    
         
            +
              # @!attribute [rw] seed
         
     | 
| 
      
 5 
     | 
    
         
            +
              #   @return [Integer]
         
     | 
| 
      
 6 
     | 
    
         
            +
              #
         
     | 
| 
      
 7 
     | 
    
         
            +
              # @!attribute [r] persistence
         
     | 
| 
      
 8 
     | 
    
         
            +
              #   @return [Float]
         
     | 
| 
      
 9 
     | 
    
         
            +
              #
         
     | 
| 
      
 10 
     | 
    
         
            +
              # @!attribute [r] octave
         
     | 
| 
      
 11 
     | 
    
         
            +
              #   @return [Integer]
         
     | 
| 
      
 12 
     | 
    
         
            +
              class Generator
         
     | 
| 
      
 13 
     | 
    
         
            +
                attr_reader :seed, :octave, :persistence
         
     | 
| 
      
 14 
     | 
    
         
            +
                def classic?; @classic; end
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
                # @!method initialize(seed, persistence, octave)
         
     | 
| 
      
 17 
     | 
    
         
            +
                #   Create a noise generator.
         
     | 
| 
      
 18 
     | 
    
         
            +
                #
         
     | 
| 
      
 19 
     | 
    
         
            +
                #   Using the same seed will always produce the same pattern. Animate a perlin 'texture' by altering the seed based on time.
         
     | 
| 
      
 20 
     | 
    
         
            +
                #
         
     | 
| 
      
 21 
     | 
    
         
            +
                #   @param seed [Integer] Seed value to create a different pattern.
         
     | 
| 
      
 22 
     | 
    
         
            +
                #   @param persistence [Float] Used to generate different frequencies/amplitudes of output.
         
     | 
| 
      
 23 
     | 
    
         
            +
                #   @param octave [Integer] Number of iterations to run (higher number of octaves takes more time)
         
     | 
| 
      
 24 
     | 
    
         
            +
                #   @option options :classic [Boolean] (false) Whether to use the slower Classic algorithm, rather than default (and much faster) Simplex.
         
     | 
| 
      
 25 
     | 
    
         
            +
                def initialize(seed, persistence, octave, options = {})
         
     | 
| 
      
 26 
     | 
    
         
            +
                  options = {
         
     | 
| 
      
 27 
     | 
    
         
            +
                      :classic => false,
         
     | 
| 
      
 28 
     | 
    
         
            +
                  }.merge! options
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
                  initialize_(seed, persistence, octave, options[:classic])
         
     | 
| 
      
 31 
     | 
    
         
            +
                end
         
     | 
| 
      
 32 
     | 
    
         
            +
                protected :initialize_ # Underlying C implementation.
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
                # @overload chunk(x, y, steps_x, steps_y, interval)
         
     | 
| 
      
 35 
     | 
    
         
            +
                #   Calculates a rectangular section of height (n) values and returns them as a 2D array.
         
     | 
| 
      
 36 
     | 
    
         
            +
                #
         
     | 
| 
      
 37 
     | 
    
         
            +
                #   This is much faster than accessing each point separately using {#[]}
         
     | 
| 
      
 38 
     | 
    
         
            +
                #
         
     | 
| 
      
 39 
     | 
    
         
            +
                #   @example
         
     | 
| 
      
 40 
     | 
    
         
            +
                #     noise = Perlin::Generator.new 123, 1.0, 1
         
     | 
| 
      
 41 
     | 
    
         
            +
                #     arr = noise.chunk 1, 1, 2, 3, 1.5
         
     | 
| 
      
 42 
     | 
    
         
            +
                #
         
     | 
| 
      
 43 
     | 
    
         
            +
                #     # access position 1, 2 (remember that arr is offset by the x, y value of the chunk)
         
     | 
| 
      
 44 
     | 
    
         
            +
                #     puts arr[0, 1] #=> -0.2208995521068573
         
     | 
| 
      
 45 
     | 
    
         
            +
                #
         
     | 
| 
      
 46 
     | 
    
         
            +
                #     p arr  #= > [[0.05753844603896141, -0.2208995521068573, 0.3973901569843292], [0.1383310854434967, -0.22248442471027374, 0.15600799024105072]]
         
     | 
| 
      
 47 
     | 
    
         
            +
                #
         
     | 
| 
      
 48 
     | 
    
         
            +
                #   @param x [Float]
         
     | 
| 
      
 49 
     | 
    
         
            +
                #   @param y [Float]
         
     | 
| 
      
 50 
     | 
    
         
            +
                #   @param steps_x [Integer]
         
     | 
| 
      
 51 
     | 
    
         
            +
                #   @param steps_y [Integer]
         
     | 
| 
      
 52 
     | 
    
         
            +
                #   @param interval [Float]
         
     | 
| 
      
 53 
     | 
    
         
            +
                #
         
     | 
| 
      
 54 
     | 
    
         
            +
                #   @return [Array<Array<Float>>] height (n) values within the rectangle.
         
     | 
| 
      
 55 
     | 
    
         
            +
                #
         
     | 
| 
      
 56 
     | 
    
         
            +
                # @overload chunk(x, y, steps_x, steps_y, interval) {|h, x, y| }
         
     | 
| 
      
 57 
     | 
    
         
            +
                #   Calculates a rectangular section of height (n) values and returns them as a 2D array.
         
     | 
| 
      
 58 
     | 
    
         
            +
                #
         
     | 
| 
      
 59 
     | 
    
         
            +
                #   This is much faster than accessing each point separately using {#[]}
         
     | 
| 
      
 60 
     | 
    
         
            +
                #
         
     | 
| 
      
 61 
     | 
    
         
            +
                #   @example
         
     | 
| 
      
 62 
     | 
    
         
            +
                #     noise = Perlin::Generator.new 123, 0.5, 3
         
     | 
| 
      
 63 
     | 
    
         
            +
                #     noise.chunk 1.0, 2.3, 3, 2, 1.5 do |h, x, y|
         
     | 
| 
      
 64 
     | 
    
         
            +
                #       # Use the height value, which is at x, y.
         
     | 
| 
      
 65 
     | 
    
         
            +
                #     end
         
     | 
| 
      
 66 
     | 
    
         
            +
                #
         
     | 
| 
      
 67 
     | 
    
         
            +
                #   @param x [Float]
         
     | 
| 
      
 68 
     | 
    
         
            +
                #   @param y [Float]
         
     | 
| 
      
 69 
     | 
    
         
            +
                #   @param steps_x [Integer]
         
     | 
| 
      
 70 
     | 
    
         
            +
                #   @param steps_y [Integer]
         
     | 
| 
      
 71 
     | 
    
         
            +
                #   @param interval [Float]
         
     | 
| 
      
 72 
     | 
    
         
            +
                #
         
     | 
| 
      
 73 
     | 
    
         
            +
                #   @yieldparam h [Float] Height at x, y
         
     | 
| 
      
 74 
     | 
    
         
            +
                #   @yieldparam x [Float]
         
     | 
| 
      
 75 
     | 
    
         
            +
                #   @yieldparam y [Float]
         
     | 
| 
      
 76 
     | 
    
         
            +
                #
         
     | 
| 
      
 77 
     | 
    
         
            +
                #   @return [nil]
         
     | 
| 
      
 78 
     | 
    
         
            +
                #
         
     | 
| 
      
 79 
     | 
    
         
            +
                # @overload chunk(x, y, z, size_x, size_y, size_z, interval)
         
     | 
| 
      
 80 
     | 
    
         
            +
                #   Calculates a rectangular section of height (n) values and returns them as a 3D array.
         
     | 
| 
      
 81 
     | 
    
         
            +
                #
         
     | 
| 
      
 82 
     | 
    
         
            +
                #   This is much faster than accessing each point separately using {#[]}
         
     | 
| 
      
 83 
     | 
    
         
            +
                #
         
     | 
| 
      
 84 
     | 
    
         
            +
                #   @example
         
     | 
| 
      
 85 
     | 
    
         
            +
                #     noise = Perlin::Generator.new 123, 0.5, 5
         
     | 
| 
      
 86 
     | 
    
         
            +
                #     arr = noise.chunk 6.0, 5.0, 4.0, 3, 2, 1, 1.5
         
     | 
| 
      
 87 
     | 
    
         
            +
                #
         
     | 
| 
      
 88 
     | 
    
         
            +
                #     # access position 2, 1, 0 (remember that arr is offset by the x, y and z value of the chunk)
         
     | 
| 
      
 89 
     | 
    
         
            +
                #     puts arr[2, 1, 0] #=>
         
     | 
| 
      
 90 
     | 
    
         
            +
                #
         
     | 
| 
      
 91 
     | 
    
         
            +
                #     p arr  #= >
         
     | 
| 
      
 92 
     | 
    
         
            +
                #
         
     | 
| 
      
 93 
     | 
    
         
            +
                #   @param x [Float]
         
     | 
| 
      
 94 
     | 
    
         
            +
                #   @param y [Float]
         
     | 
| 
      
 95 
     | 
    
         
            +
                #   @param z [Float]
         
     | 
| 
      
 96 
     | 
    
         
            +
                #   @param steps_x [Integer]
         
     | 
| 
      
 97 
     | 
    
         
            +
                #   @param steps_y [Integer]
         
     | 
| 
      
 98 
     | 
    
         
            +
                #   @param steps_z [Integer]
         
     | 
| 
      
 99 
     | 
    
         
            +
                #   @param interval [Float]
         
     | 
| 
      
 100 
     | 
    
         
            +
                #
         
     | 
| 
      
 101 
     | 
    
         
            +
                #   @return [Array<Array<Float>>] height (n) values within the rectangle.
         
     | 
| 
      
 102 
     | 
    
         
            +
                #
         
     | 
| 
      
 103 
     | 
    
         
            +
                # @overload chunk(x, y, z, size_x, size_y, size_z, interval) {|h, x, y| }
         
     | 
| 
      
 104 
     | 
    
         
            +
                #   Calculates a rectangular section of height (n) values and returns them as a 3D array.
         
     | 
| 
      
 105 
     | 
    
         
            +
                #
         
     | 
| 
      
 106 
     | 
    
         
            +
                #   This is much faster than accessing each point separately using {#[]}
         
     | 
| 
      
 107 
     | 
    
         
            +
                #
         
     | 
| 
      
 108 
     | 
    
         
            +
                #   @example
         
     | 
| 
      
 109 
     | 
    
         
            +
                #     noise = Perlin::Generator.new 123, 0.8, 3
         
     | 
| 
      
 110 
     | 
    
         
            +
                #     noise.chunk 6.0, 5.0, 4.0, 3, 2, 1, 1.5 do |h, x, y, z|
         
     | 
| 
      
 111 
     | 
    
         
            +
                #       # Use the height value, which is at x, y, z.
         
     | 
| 
      
 112 
     | 
    
         
            +
                #     end
         
     | 
| 
      
 113 
     | 
    
         
            +
                #
         
     | 
| 
      
 114 
     | 
    
         
            +
                #   @param x [Float]
         
     | 
| 
      
 115 
     | 
    
         
            +
                #   @param y [Float]
         
     | 
| 
      
 116 
     | 
    
         
            +
                #   @param z [Float]
         
     | 
| 
      
 117 
     | 
    
         
            +
                #   @param steps_x [Integer]
         
     | 
| 
      
 118 
     | 
    
         
            +
                #   @param steps_y [Integer]
         
     | 
| 
      
 119 
     | 
    
         
            +
                #   @param steps_z [Integer]
         
     | 
| 
      
 120 
     | 
    
         
            +
                #   @param interval [Float]
         
     | 
| 
      
 121 
     | 
    
         
            +
                #
         
     | 
| 
      
 122 
     | 
    
         
            +
                #   @yieldparam h [Float] Height at x, y, z
         
     | 
| 
      
 123 
     | 
    
         
            +
                #   @yieldparam x [Float]
         
     | 
| 
      
 124 
     | 
    
         
            +
                #   @yieldparam y [Float]
         
     | 
| 
      
 125 
     | 
    
         
            +
                #   @yieldparam z [Float]
         
     | 
| 
      
 126 
     | 
    
         
            +
                #
         
     | 
| 
      
 127 
     | 
    
         
            +
                #   @return [nil]
         
     | 
| 
      
 128 
     | 
    
         
            +
             
     | 
| 
      
 129 
     | 
    
         
            +
                # Gets height (n) at a point in 2D or 3D space.
         
     | 
| 
      
 130 
     | 
    
         
            +
                #
         
     | 
| 
      
 131 
     | 
    
         
            +
                # This is much slower, if accessing many points, than using {#chunk}
         
     | 
| 
      
 132 
     | 
    
         
            +
                #
         
     | 
| 
      
 133 
     | 
    
         
            +
                # @overload [](x, y)
         
     | 
| 
      
 134 
     | 
    
         
            +
                #   Gets height (n) value at a specific 2D position.
         
     | 
| 
      
 135 
     | 
    
         
            +
                #
         
     | 
| 
      
 136 
     | 
    
         
            +
                #   @example
         
     | 
| 
      
 137 
     | 
    
         
            +
                #     noise = Perlin::Generator.new 123, 1.0, 1
         
     | 
| 
      
 138 
     | 
    
         
            +
                #
         
     | 
| 
      
 139 
     | 
    
         
            +
                #     # Returns a 'height' value for (x, y)
         
     | 
| 
      
 140 
     | 
    
         
            +
                #     puts noise[10, 20]  #=> 0.9004574418067932
         
     | 
| 
      
 141 
     | 
    
         
            +
                #
         
     | 
| 
      
 142 
     | 
    
         
            +
                #   @param x [Float]
         
     | 
| 
      
 143 
     | 
    
         
            +
                #   @param y [Float]
         
     | 
| 
      
 144 
     | 
    
         
            +
                #   @return [Float] height (n) value at the position
         
     | 
| 
      
 145 
     | 
    
         
            +
                #
         
     | 
| 
      
 146 
     | 
    
         
            +
                # @overload [](x, y, z)
         
     | 
| 
      
 147 
     | 
    
         
            +
                #   Gets height (n) value at a specific 3D position.
         
     | 
| 
      
 148 
     | 
    
         
            +
                #
         
     | 
| 
      
 149 
     | 
    
         
            +
                #   @example
         
     | 
| 
      
 150 
     | 
    
         
            +
                #     noise = Perlin::Generator.new 123, 1.0, 1
         
     | 
| 
      
 151 
     | 
    
         
            +
                #
         
     | 
| 
      
 152 
     | 
    
         
            +
                #     # Returns a 'height' value for (x, y, z)
         
     | 
| 
      
 153 
     | 
    
         
            +
                #     puts noise[10, 20, 30]  #=> 0.017745036631822586
         
     | 
| 
      
 154 
     | 
    
         
            +
                #
         
     | 
| 
      
 155 
     | 
    
         
            +
                #   @param x [Float]
         
     | 
| 
      
 156 
     | 
    
         
            +
                #   @param y [Float]
         
     | 
| 
      
 157 
     | 
    
         
            +
                #   @param z [Float]
         
     | 
| 
      
 158 
     | 
    
         
            +
                #   @return [Float]  height (n) value at the position
         
     | 
| 
      
 159 
     | 
    
         
            +
                alias_method :run, :[]
         
     | 
| 
      
 160 
     | 
    
         
            +
              end
         
     | 
| 
      
 161 
     | 
    
         
            +
            end
         
     | 
    
        data/spec/helper.rb
    ADDED
    
    
| 
         @@ -0,0 +1,245 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
             
     | 
| 
      
 2 
     | 
    
         
            +
            require File.expand_path("../../helper.rb", __FILE__)
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            describe Perlin::Generator do
         
     | 
| 
      
 5 
     | 
    
         
            +
              before :each do
         
     | 
| 
      
 6 
     | 
    
         
            +
                @classic = Perlin::Generator.new 123, 1.5, 2, :classic => true
         
     | 
| 
      
 7 
     | 
    
         
            +
                @simplex = Perlin::Generator.new 0, 1.5, 2
         
     | 
| 
      
 8 
     | 
    
         
            +
                @accuracy = 0.00001
         
     | 
| 
      
 9 
     | 
    
         
            +
              end
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
              it "should have seed set correctly" do
         
     | 
| 
      
 12 
     | 
    
         
            +
                @classic.seed.should eq 123
         
     | 
| 
      
 13 
     | 
    
         
            +
                @classic.seed.should be_kind_of Integer
         
     | 
| 
      
 14 
     | 
    
         
            +
              end
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
              it "should have seed set uniquely on all generators" do
         
     | 
| 
      
 17 
     | 
    
         
            +
                # This was a bug in the original code!
         
     | 
| 
      
 18 
     | 
    
         
            +
                g = Perlin::Generator.new 99, 1, 1
         
     | 
| 
      
 19 
     | 
    
         
            +
                g.seed.should eq 99
         
     | 
| 
      
 20 
     | 
    
         
            +
                g.seed.should be_kind_of Integer
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
                @classic.seed.should eq 123
         
     | 
| 
      
 23 
     | 
    
         
            +
                g[0, 0].should_not eq @classic[0, 0]
         
     | 
| 
      
 24 
     | 
    
         
            +
              end
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
              it "should have persistence set correctly" do
         
     | 
| 
      
 27 
     | 
    
         
            +
                @classic.persistence.should be_within(@accuracy).of 1.5
         
     | 
| 
      
 28 
     | 
    
         
            +
              end
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
              it "should have octave set correctly" do
         
     | 
| 
      
 31 
     | 
    
         
            +
                @classic.octave.should eq 2
         
     | 
| 
      
 32 
     | 
    
         
            +
                @classic.octave.should be_kind_of Integer
         
     | 
| 
      
 33 
     | 
    
         
            +
              end
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
              describe "SIMPLEX" do
         
     | 
| 
      
 36 
     | 
    
         
            +
                it "should have classic? set correctly" do
         
     | 
| 
      
 37 
     | 
    
         
            +
                  @simplex.classic?.should be_false
         
     | 
| 
      
 38 
     | 
    
         
            +
                end
         
     | 
| 
      
 39 
     | 
    
         
            +
              end
         
     | 
| 
      
 40 
     | 
    
         
            +
             
     | 
| 
      
 41 
     | 
    
         
            +
              describe "CLASSIC" do
         
     | 
| 
      
 42 
     | 
    
         
            +
                it "should have classic? set correctly" do
         
     | 
| 
      
 43 
     | 
    
         
            +
                  @classic.classic?.should be_true
         
     | 
| 
      
 44 
     | 
    
         
            +
                end
         
     | 
| 
      
 45 
     | 
    
         
            +
              end
         
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
      
 47 
     | 
    
         
            +
              describe "seed=" do
         
     | 
| 
      
 48 
     | 
    
         
            +
                it "should set seed correctly" do
         
     | 
| 
      
 49 
     | 
    
         
            +
                  @classic.seed = 12
         
     | 
| 
      
 50 
     | 
    
         
            +
                  @classic.seed.should eq 12
         
     | 
| 
      
 51 
     | 
    
         
            +
                  @classic.seed.should be_kind_of Integer
         
     | 
| 
      
 52 
     | 
    
         
            +
                end
         
     | 
| 
      
 53 
     | 
    
         
            +
              end
         
     | 
| 
      
 54 
     | 
    
         
            +
             
     | 
| 
      
 55 
     | 
    
         
            +
              describe "persistence=" do
         
     | 
| 
      
 56 
     | 
    
         
            +
                it "should set persistence correctly" do
         
     | 
| 
      
 57 
     | 
    
         
            +
                  @classic.persistence = 12
         
     | 
| 
      
 58 
     | 
    
         
            +
                  @classic.persistence.should eq 12
         
     | 
| 
      
 59 
     | 
    
         
            +
                  @classic.persistence.should be_kind_of Float
         
     | 
| 
      
 60 
     | 
    
         
            +
                end
         
     | 
| 
      
 61 
     | 
    
         
            +
              end
         
     | 
| 
      
 62 
     | 
    
         
            +
             
     | 
| 
      
 63 
     | 
    
         
            +
              describe "octave=" do
         
     | 
| 
      
 64 
     | 
    
         
            +
                it "should set octave correctly" do
         
     | 
| 
      
 65 
     | 
    
         
            +
                  @classic.octave = 12
         
     | 
| 
      
 66 
     | 
    
         
            +
                  @classic.octave.should eq 12
         
     | 
| 
      
 67 
     | 
    
         
            +
                  @classic.octave.should be_kind_of Integer
         
     | 
| 
      
 68 
     | 
    
         
            +
                end
         
     | 
| 
      
 69 
     | 
    
         
            +
              end
         
     | 
| 
      
 70 
     | 
    
         
            +
             
     | 
| 
      
 71 
     | 
    
         
            +
              describe "classic=" do
         
     | 
| 
      
 72 
     | 
    
         
            +
                it "should set classic? correctly" do
         
     | 
| 
      
 73 
     | 
    
         
            +
                  @simplex.classic = true
         
     | 
| 
      
 74 
     | 
    
         
            +
                  @simplex.classic?.should be_true
         
     | 
| 
      
 75 
     | 
    
         
            +
                end
         
     | 
| 
      
 76 
     | 
    
         
            +
              end
         
     | 
| 
      
 77 
     | 
    
         
            +
             
     | 
| 
      
 78 
     | 
    
         
            +
              describe "[]" do
         
     | 
| 
      
 79 
     | 
    
         
            +
                it "[x, y] should support float values" do
         
     | 
| 
      
 80 
     | 
    
         
            +
                  @simplex[0, 0].should_not be_within(@accuracy).of @simplex[0.2, 0.2]
         
     | 
| 
      
 81 
     | 
    
         
            +
                end
         
     | 
| 
      
 82 
     | 
    
         
            +
             
     | 
| 
      
 83 
     | 
    
         
            +
             
     | 
| 
      
 84 
     | 
    
         
            +
             
     | 
| 
      
 85 
     | 
    
         
            +
                it "[x, y, z] should support float values" do
         
     | 
| 
      
 86 
     | 
    
         
            +
                  @simplex[0, 0, 0].should_not be_within(@accuracy).of @simplex[0.2, 0.2, 0.2]
         
     | 
| 
      
 87 
     | 
    
         
            +
                end
         
     | 
| 
      
 88 
     | 
    
         
            +
             
     | 
| 
      
 89 
     | 
    
         
            +
                it "should fail if given too few arguments" do
         
     | 
| 
      
 90 
     | 
    
         
            +
                  lambda { @classic[0] }.should raise_error ArgumentError
         
     | 
| 
      
 91 
     | 
    
         
            +
                end
         
     | 
| 
      
 92 
     | 
    
         
            +
             
     | 
| 
      
 93 
     | 
    
         
            +
                it "should fail if given too many arguments" do
         
     | 
| 
      
 94 
     | 
    
         
            +
                  lambda { @classic[0, 0, 0, 0] }.should raise_error ArgumentError
         
     | 
| 
      
 95 
     | 
    
         
            +
                end
         
     | 
| 
      
 96 
     | 
    
         
            +
             
     | 
| 
      
 97 
     | 
    
         
            +
                describe "SIMPLEX" do
         
     | 
| 
      
 98 
     | 
    
         
            +
                  describe "[](x, y)" do
         
     | 
| 
      
 99 
     | 
    
         
            +
                    it "should return the appropriate value" do
         
     | 
| 
      
 100 
     | 
    
         
            +
                      @simplex[0, 1].should be_within(@accuracy).of 0.7600996515471077
         
     | 
| 
      
 101 
     | 
    
         
            +
                    end
         
     | 
| 
      
 102 
     | 
    
         
            +
             
     | 
| 
      
 103 
     | 
    
         
            +
                    it "should return different values based on seed" do
         
     | 
| 
      
 104 
     | 
    
         
            +
                      initial = @simplex[9, 5]
         
     | 
| 
      
 105 
     | 
    
         
            +
                      @simplex.seed = 95
         
     | 
| 
      
 106 
     | 
    
         
            +
                      initial.should_not be_within(@accuracy).of @simplex[9, 5]
         
     | 
| 
      
 107 
     | 
    
         
            +
                    end
         
     | 
| 
      
 108 
     | 
    
         
            +
                  end
         
     | 
| 
      
 109 
     | 
    
         
            +
             
     | 
| 
      
 110 
     | 
    
         
            +
                  describe "[](x, y, z)" do
         
     | 
| 
      
 111 
     | 
    
         
            +
                    it "should return the appropriate value" do
         
     | 
| 
      
 112 
     | 
    
         
            +
                      @simplex[0, 1, 2].should be_within(@accuracy).of -0.4994023090387083
         
     | 
| 
      
 113 
     | 
    
         
            +
                    end
         
     | 
| 
      
 114 
     | 
    
         
            +
                  end
         
     | 
| 
      
 115 
     | 
    
         
            +
                end
         
     | 
| 
      
 116 
     | 
    
         
            +
             
     | 
| 
      
 117 
     | 
    
         
            +
                describe "CLASSIC" do
         
     | 
| 
      
 118 
     | 
    
         
            +
                  describe "[](x, y)" do
         
     | 
| 
      
 119 
     | 
    
         
            +
                    it "should return the appropriate value" do
         
     | 
| 
      
 120 
     | 
    
         
            +
                      @classic[0, 0].should be_within(@accuracy).of -1.0405873507261276
         
     | 
| 
      
 121 
     | 
    
         
            +
                    end
         
     | 
| 
      
 122 
     | 
    
         
            +
             
     | 
| 
      
 123 
     | 
    
         
            +
                    it "should return different values based on seed" do
         
     | 
| 
      
 124 
     | 
    
         
            +
                      initial = @classic[9, 5]
         
     | 
| 
      
 125 
     | 
    
         
            +
                      @classic.seed = 95
         
     | 
| 
      
 126 
     | 
    
         
            +
                      initial.should_not be_within(@accuracy).of @classic[9, 5]
         
     | 
| 
      
 127 
     | 
    
         
            +
                    end
         
     | 
| 
      
 128 
     | 
    
         
            +
                  end
         
     | 
| 
      
 129 
     | 
    
         
            +
             
     | 
| 
      
 130 
     | 
    
         
            +
                  describe "[](x, y, z)" do
         
     | 
| 
      
 131 
     | 
    
         
            +
                    it "should return the appropriate value" do
         
     | 
| 
      
 132 
     | 
    
         
            +
                      @classic[0, 0, 0].should be_within(@accuracy).of -1.5681833028793335
         
     | 
| 
      
 133 
     | 
    
         
            +
                    end
         
     | 
| 
      
 134 
     | 
    
         
            +
                  end
         
     | 
| 
      
 135 
     | 
    
         
            +
                end
         
     | 
| 
      
 136 
     | 
    
         
            +
              end
         
     | 
| 
      
 137 
     | 
    
         
            +
             
     | 
| 
      
 138 
     | 
    
         
            +
              describe "chunk" do
         
     | 
| 
      
 139 
     | 
    
         
            +
                describe "chunk 2D" do
         
     | 
| 
      
 140 
     | 
    
         
            +
             
     | 
| 
      
 141 
     | 
    
         
            +
                  describe "SIMPLEX" do
         
     | 
| 
      
 142 
     | 
    
         
            +
                    it "should return the appropriate values" do
         
     | 
| 
      
 143 
     | 
    
         
            +
                      chunk = @simplex.chunk 1, 2, 3, 4, 1
         
     | 
| 
      
 144 
     | 
    
         
            +
                      chunk.should eq [[0.0, 0.19517135798668975, 0.19616149193873283, -5.932618130464163e-07], [0.10886869609093779, 0.10787834101090553, -5.932618130464163e-07, -0.19616171787047829], [-0.0431512326002121, 0.0, 0.260888409614563, 0.45605969740428703]]
         
     | 
| 
      
 145 
     | 
    
         
            +
                    end
         
     | 
| 
      
 146 
     | 
    
         
            +
             
     | 
| 
      
 147 
     | 
    
         
            +
                    it "should give the same results, regardless of x/y offset" do
         
     | 
| 
      
 148 
     | 
    
         
            +
                      chunk1 = @simplex.chunk 0, 0, 3, 3, 0.1
         
     | 
| 
      
 149 
     | 
    
         
            +
                      chunk2 = @simplex.chunk 0.1, 0.1, 3, 3, 0.1
         
     | 
| 
      
 150 
     | 
    
         
            +
             
     | 
| 
      
 151 
     | 
    
         
            +
                      chunk2[0][0].should eq chunk1[1][1]
         
     | 
| 
      
 152 
     | 
    
         
            +
                      chunk2[0][1].should eq chunk1[1][2]
         
     | 
| 
      
 153 
     | 
    
         
            +
                      chunk2[1][0].should eq chunk1[2][1]
         
     | 
| 
      
 154 
     | 
    
         
            +
                      chunk2[1][1].should eq chunk1[2][2]
         
     | 
| 
      
 155 
     | 
    
         
            +
                    end
         
     | 
| 
      
 156 
     | 
    
         
            +
             
     | 
| 
      
 157 
     | 
    
         
            +
                    it "should work with a block" do
         
     | 
| 
      
 158 
     | 
    
         
            +
                      arr = []
         
     | 
| 
      
 159 
     | 
    
         
            +
                      @simplex.chunk 1, 2, 3, 4, 1 do |h, x, y|
         
     | 
| 
      
 160 
     | 
    
         
            +
                        arr << [h, x, y]
         
     | 
| 
      
 161 
     | 
    
         
            +
                      end
         
     | 
| 
      
 162 
     | 
    
         
            +
                      arr.should eq [[0.0, 1.0, 2.0], [0.19517135798668975, 1.0, 3.0], [0.19616149193873283, 1.0, 4.0], [-5.932618130464163e-07, 1.0, 5.0], [0.10886869609093779, 2.0, 2.0], [0.10787834101090553, 2.0, 3.0], [-5.932618130464163e-07, 2.0, 4.0], [-0.19616171787047829, 2.0, 5.0], [-0.0431512326002121, 3.0, 2.0], [0.0, 3.0, 3.0], [0.260888409614563, 3.0, 4.0], [0.45605969740428703, 3.0, 5.0]]
         
     | 
| 
      
 163 
     | 
    
         
            +
                    end
         
     | 
| 
      
 164 
     | 
    
         
            +
                  end
         
     | 
| 
      
 165 
     | 
    
         
            +
             
     | 
| 
      
 166 
     | 
    
         
            +
                  describe "CLASSIC" do
         
     | 
| 
      
 167 
     | 
    
         
            +
                    it "should return the appropriate values" do
         
     | 
| 
      
 168 
     | 
    
         
            +
                      chunk = @classic.chunk 1, 2, 3, 4, 1
         
     | 
| 
      
 169 
     | 
    
         
            +
                      chunk.should eq [[-2.014809340238571, -0.7094215080142021, -0.5946878045797348, 0.4915006756782532], [-1.4068767204880714, -0.732808068394661, 0.07362580299377441, -0.325466126203537], [-0.857817449606955, -1.940980076789856, -0.5687579363584518, 1.4209578335285187]]
         
     | 
| 
      
 170 
     | 
    
         
            +
                    end
         
     | 
| 
      
 171 
     | 
    
         
            +
             
     | 
| 
      
 172 
     | 
    
         
            +
                    it "should give the same results, regardless of x/y offset" do
         
     | 
| 
      
 173 
     | 
    
         
            +
                      chunk1 = @classic.chunk 0, 0, 3, 3, 0.1
         
     | 
| 
      
 174 
     | 
    
         
            +
                      chunk2 = @classic.chunk 0.1, 0.1, 3, 3, 0.1
         
     | 
| 
      
 175 
     | 
    
         
            +
                      chunk2[0][0].should eq chunk1[1][1]
         
     | 
| 
      
 176 
     | 
    
         
            +
                      chunk2[0][1].should eq chunk1[1][2]
         
     | 
| 
      
 177 
     | 
    
         
            +
                      chunk2[1][0].should eq chunk1[2][1]
         
     | 
| 
      
 178 
     | 
    
         
            +
                      chunk2[1][1].should eq chunk1[2][2]
         
     | 
| 
      
 179 
     | 
    
         
            +
                    end
         
     | 
| 
      
 180 
     | 
    
         
            +
             
     | 
| 
      
 181 
     | 
    
         
            +
                    it "should work with a block" do
         
     | 
| 
      
 182 
     | 
    
         
            +
                      arr = []
         
     | 
| 
      
 183 
     | 
    
         
            +
                      @classic.chunk 1, 2, 3, 4, 1 do |h, x, y|
         
     | 
| 
      
 184 
     | 
    
         
            +
                        arr << [h, x, y]
         
     | 
| 
      
 185 
     | 
    
         
            +
                      end
         
     | 
| 
      
 186 
     | 
    
         
            +
                      arr.should eq [[-2.014809340238571, 1.0, 2.0], [-0.7094215080142021, 1.0, 3.0], [-0.5946878045797348, 1.0, 4.0], [0.4915006756782532, 1.0, 5.0], [-1.4068767204880714, 2.0, 2.0], [-0.732808068394661, 2.0, 3.0], [0.07362580299377441, 2.0, 4.0], [-0.325466126203537, 2.0, 5.0], [-0.857817449606955, 3.0, 2.0], [-1.940980076789856, 3.0, 3.0], [-0.5687579363584518, 3.0, 4.0], [1.4209578335285187, 3.0, 5.0]]
         
     | 
| 
      
 187 
     | 
    
         
            +
                    end
         
     | 
| 
      
 188 
     | 
    
         
            +
                  end
         
     | 
| 
      
 189 
     | 
    
         
            +
             
     | 
| 
      
 190 
     | 
    
         
            +
                  it "should fail if given negative size_x" do
         
     | 
| 
      
 191 
     | 
    
         
            +
                    lambda { @classic.chunk 0, 0, -1, 0 }.should raise_error ArgumentError
         
     | 
| 
      
 192 
     | 
    
         
            +
                  end
         
     | 
| 
      
 193 
     | 
    
         
            +
             
     | 
| 
      
 194 
     | 
    
         
            +
                  it "should fail if given negative size_y" do
         
     | 
| 
      
 195 
     | 
    
         
            +
                    lambda { @classic.chunk 0, 0, 0, -1 }.should raise_error ArgumentError
         
     | 
| 
      
 196 
     | 
    
         
            +
                  end
         
     | 
| 
      
 197 
     | 
    
         
            +
             
     | 
| 
      
 198 
     | 
    
         
            +
                end
         
     | 
| 
      
 199 
     | 
    
         
            +
             
     | 
| 
      
 200 
     | 
    
         
            +
                describe "chunk 3D" do
         
     | 
| 
      
 201 
     | 
    
         
            +
                  describe "SIMPLEX" do
         
     | 
| 
      
 202 
     | 
    
         
            +
                    it "should return the appropriate values" do
         
     | 
| 
      
 203 
     | 
    
         
            +
                      chunk = @simplex.chunk 6, 5, 4, 3, 2, 1, 1
         
     | 
| 
      
 204 
     | 
    
         
            +
                      chunk.should eq [[[-0.0506731136544405], [0.13219586780905937]], [[0.32796947870374366], [0.5241572306428496]], [[-0.10557871005195935], [-0.10961889028549195]]]
         
     | 
| 
      
 205 
     | 
    
         
            +
                    end
         
     | 
| 
      
 206 
     | 
    
         
            +
             
     | 
| 
      
 207 
     | 
    
         
            +
                    it "should work with a block" do
         
     | 
| 
      
 208 
     | 
    
         
            +
                      arr = []
         
     | 
| 
      
 209 
     | 
    
         
            +
                      @simplex.chunk 6, 5, 4, 3, 2, 1, 1 do |h, x, y, z|
         
     | 
| 
      
 210 
     | 
    
         
            +
                        arr << [h, x, y, z]
         
     | 
| 
      
 211 
     | 
    
         
            +
                      end
         
     | 
| 
      
 212 
     | 
    
         
            +
                      arr.should eq [[-0.0506731136544405, 6.0, 5.0, 4.0], [0.13219586780905937, 6.0, 6.0, 4.0], [0.32796947870374366, 7.0, 5.0, 4.0], [0.5241572306428496, 7.0, 6.0, 4.0], [-0.10557871005195935, 8.0, 5.0, 4.0], [-0.10961889028549195, 8.0, 6.0, 4.0]]
         
     | 
| 
      
 213 
     | 
    
         
            +
                    end
         
     | 
| 
      
 214 
     | 
    
         
            +
                  end
         
     | 
| 
      
 215 
     | 
    
         
            +
             
     | 
| 
      
 216 
     | 
    
         
            +
                  describe "CLASSIC" do
         
     | 
| 
      
 217 
     | 
    
         
            +
                    it "should return the appropriate values" do
         
     | 
| 
      
 218 
     | 
    
         
            +
                      chunk = @classic.chunk 6, 5, 4, 3, 2, 1, 1
         
     | 
| 
      
 219 
     | 
    
         
            +
                      chunk.should eq [[[0.7522532045841217], [0.3314518630504608]], [[0.3198353797197342], [0.967293307185173]], [[1.1024393141269684], [0.5659154206514359]]]
         
     | 
| 
      
 220 
     | 
    
         
            +
                    end
         
     | 
| 
      
 221 
     | 
    
         
            +
             
     | 
| 
      
 222 
     | 
    
         
            +
                    it "should work with a block" do
         
     | 
| 
      
 223 
     | 
    
         
            +
                      arr = []
         
     | 
| 
      
 224 
     | 
    
         
            +
                      @classic.chunk 6, 5, 4, 3, 2, 1, 1 do |h, x, y, z|
         
     | 
| 
      
 225 
     | 
    
         
            +
                        arr << [h, x, y, z]
         
     | 
| 
      
 226 
     | 
    
         
            +
                      end
         
     | 
| 
      
 227 
     | 
    
         
            +
                      arr.should eq [[0.7522532045841217, 6.0, 5.0, 4.0], [0.3314518630504608, 6.0, 6.0, 4.0], [0.3198353797197342, 7.0, 5.0, 4.0], [0.967293307185173, 7.0, 6.0, 4.0], [1.1024393141269684, 8.0, 5.0, 4.0], [0.5659154206514359, 8.0, 6.0, 4.0]]
         
     | 
| 
      
 228 
     | 
    
         
            +
                    end
         
     | 
| 
      
 229 
     | 
    
         
            +
                  end
         
     | 
| 
      
 230 
     | 
    
         
            +
             
     | 
| 
      
 231 
     | 
    
         
            +
                  it "should fail if given negative size_x" do
         
     | 
| 
      
 232 
     | 
    
         
            +
                    lambda { @classic.chunk 0, 0, 0, -1, 0, 0 }.should raise_error ArgumentError
         
     | 
| 
      
 233 
     | 
    
         
            +
                  end
         
     | 
| 
      
 234 
     | 
    
         
            +
             
     | 
| 
      
 235 
     | 
    
         
            +
                  it "should fail if given negative size_y" do
         
     | 
| 
      
 236 
     | 
    
         
            +
                    lambda { @classic.chunk 0, 0, 0, 0, -1, 0 }.should raise_error ArgumentError
         
     | 
| 
      
 237 
     | 
    
         
            +
                  end
         
     | 
| 
      
 238 
     | 
    
         
            +
             
     | 
| 
      
 239 
     | 
    
         
            +
                  it "should fail if given negative size_z" do
         
     | 
| 
      
 240 
     | 
    
         
            +
                    lambda { @classic.chunk 0, 0, 0, 0, 0, -1 }.should raise_error ArgumentError
         
     | 
| 
      
 241 
     | 
    
         
            +
                  end
         
     | 
| 
      
 242 
     | 
    
         
            +
                end
         
     | 
| 
      
 243 
     | 
    
         
            +
             
     | 
| 
      
 244 
     | 
    
         
            +
              end
         
     | 
| 
      
 245 
     | 
    
         
            +
            end
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: perlin
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0.1. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.1.1
         
     | 
| 
       5 
5 
     | 
    
         
             
              prerelease: 
         
     | 
| 
       6 
6 
     | 
    
         
             
            platform: x86-mingw32
         
     | 
| 
       7 
7 
     | 
    
         
             
            authors:
         
     | 
| 
         @@ -128,6 +128,9 @@ files: 
     | 
|
| 
       128 
128 
     | 
    
         
             
            - LICENSE
         
     | 
| 
       129 
129 
     | 
    
         
             
            - Rakefile
         
     | 
| 
       130 
130 
     | 
    
         
             
            - README.md
         
     | 
| 
      
 131 
     | 
    
         
            +
            - lib/perlin/generator.rb
         
     | 
| 
      
 132 
     | 
    
         
            +
            - lib/perlin/version.rb
         
     | 
| 
      
 133 
     | 
    
         
            +
            - lib/perlin.rb
         
     | 
| 
       131 
134 
     | 
    
         
             
            - ext/perlin/classic.c
         
     | 
| 
       132 
135 
     | 
    
         
             
            - ext/perlin/generator.c
         
     | 
| 
       133 
136 
     | 
    
         
             
            - ext/perlin/perlin.c
         
     | 
| 
         @@ -143,6 +146,8 @@ files: 
     | 
|
| 
       143 
146 
     | 
    
         
             
            - examples/index_in_3d.rb
         
     | 
| 
       144 
147 
     | 
    
         
             
            - examples/ogl/README.md
         
     | 
| 
       145 
148 
     | 
    
         
             
            - examples/ogl/run.rb
         
     | 
| 
      
 149 
     | 
    
         
            +
            - spec/helper.rb
         
     | 
| 
      
 150 
     | 
    
         
            +
            - spec/perlin/generator_spec.rb
         
     | 
| 
       146 
151 
     | 
    
         
             
            - lib/perlin/1.8/perlin.so
         
     | 
| 
       147 
152 
     | 
    
         
             
            - lib/perlin/1.9/perlin.so
         
     | 
| 
       148 
153 
     | 
    
         
             
            homepage: https://github.com/boj/ruby-perlin
         
     | 
| 
         @@ -158,22 +163,18 @@ required_ruby_version: !ruby/object:Gem::Requirement 
     | 
|
| 
       158 
163 
     | 
    
         
             
              - - ! '>='
         
     | 
| 
       159 
164 
     | 
    
         
             
                - !ruby/object:Gem::Version
         
     | 
| 
       160 
165 
     | 
    
         
             
                  version: '0'
         
     | 
| 
       161 
     | 
    
         
            -
                  segments:
         
     | 
| 
       162 
     | 
    
         
            -
                  - 0
         
     | 
| 
       163 
     | 
    
         
            -
                  hash: 1024176461
         
     | 
| 
       164 
166 
     | 
    
         
             
            required_rubygems_version: !ruby/object:Gem::Requirement
         
     | 
| 
       165 
167 
     | 
    
         
             
              none: false
         
     | 
| 
       166 
168 
     | 
    
         
             
              requirements:
         
     | 
| 
       167 
169 
     | 
    
         
             
              - - ! '>='
         
     | 
| 
       168 
170 
     | 
    
         
             
                - !ruby/object:Gem::Version
         
     | 
| 
       169 
171 
     | 
    
         
             
                  version: '0'
         
     | 
| 
       170 
     | 
    
         
            -
                  segments:
         
     | 
| 
       171 
     | 
    
         
            -
                  - 0
         
     | 
| 
       172 
     | 
    
         
            -
                  hash: 1024176461
         
     | 
| 
       173 
172 
     | 
    
         
             
            requirements: []
         
     | 
| 
       174 
173 
     | 
    
         
             
            rubyforge_project: ruby-perlin
         
     | 
| 
       175 
174 
     | 
    
         
             
            rubygems_version: 1.8.24
         
     | 
| 
       176 
175 
     | 
    
         
             
            signing_key: 
         
     | 
| 
       177 
176 
     | 
    
         
             
            specification_version: 3
         
     | 
| 
       178 
177 
     | 
    
         
             
            summary: Perlin Noise C extension
         
     | 
| 
       179 
     | 
    
         
            -
            test_files: 
     | 
| 
      
 178 
     | 
    
         
            +
            test_files:
         
     | 
| 
      
 179 
     | 
    
         
            +
            - spec/helper.rb
         
     | 
| 
      
 180 
     | 
    
         
            +
            - spec/perlin/generator_spec.rb
         
     |