interpolate 0.2.0 → 0.2.1

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.
@@ -0,0 +1,2 @@
1
+ w���YQ���Ip�YV���5����<��K����+�;VS�5m#3,�I�=Ʒ�UK�1z��(B�� q[ }{vD��A�uu�lE�Xo�����6�Fȭ�b1u�����cn˒�ي�=��&�}�ԅf
2
+ ���b���~�ߎ<I>���7=�k$i!�X�n*��M�vc��s���iC�4�H+*��a9m���8e/Z+̿G��Z���H������]e��8��x'����5'S���~�>(��U�
@@ -0,0 +1,28 @@
1
+ == 0.2.1 (2008.1.27)
2
+
3
+ * First public release
4
+
5
+ * Project Cleanup:
6
+
7
+ * Documentation enhancements and updates.
8
+ * +add+ is now +merge+
9
+
10
+ == 0.2.0 (2008.1.24)
11
+
12
+ * Changed the library name to "interpolate"
13
+ * Added +interpolate+ (+Array+) that covers uniform arrays and nested arrays
14
+ * Added more tests, documentation, and examples
15
+
16
+ == 0.1.0 (2008.1.22)
17
+
18
+ * 2 Major Changes:
19
+
20
+ * Gadient calls +interpolate+ on values for OOP goodness
21
+ * Checks added for respond_to? +interpolate+ on values
22
+ * Added +interpolate+ (+Numeric+)
23
+
24
+ == 0.0.1 (2008.1.20)
25
+
26
+ * Initial coding
27
+ * N-sized arbitrary floating point gradients
28
+
File without changes
@@ -1,5 +1,5 @@
1
- CHANGELOG
2
- MIT-LICENSE
1
+ CHANGELOG.txt
2
+ LICENSE.txt
3
3
  Manifest.txt
4
4
  README.txt
5
5
  Rakefile
data/README.txt CHANGED
@@ -1,11 +1,186 @@
1
- == Interpolate
1
+ = Interpolate
2
2
 
3
- Library for generic interpolation objects. Useful for such things as generating
3
+ == Author
4
+
5
+ Adam Collins [adam.w.collins@gmail.com]
6
+
7
+
8
+ == Description
9
+
10
+ Library for generic Interpolation objects. Useful for such things as generating
4
11
  linear motion between points (or arrays of points), multi-channel color
5
12
  gradients, piecewise functions, or even just placing values within intervals.
6
13
 
7
- == Author
8
14
 
9
- Adam Collins
10
- adam.w.collins@gmail.com
15
+ == General Usage
16
+
17
+ Specify the interpolation as a Hash, where keys represent numeric points
18
+ along the gradient and values represent the known values along that gradient.
19
+
20
+ Here's an example for determining where, in a range of seven zones, each value
21
+ of a set falls into:
22
+
23
+ require 'rubygems'
24
+ require 'interpolate'
25
+
26
+ points = {
27
+ 0.000 => 0,
28
+ 0.427 => 1,
29
+ 1.200 => 2,
30
+ 3.420 => 3,
31
+ 27.50 => 4,
32
+ 45.20 => 5,
33
+ 124.4 => 6,
34
+ }
35
+
36
+ zones = Interpolation.new(points)
37
+
38
+ values = [
39
+ -20.2,
40
+ 0.234,
41
+ 65.24,
42
+ 9.234,
43
+ 398.4,
44
+ 4000
45
+ ]
46
+
47
+ values.each do |value|
48
+ zone = zones.at(value).floor
49
+ puts "A value of #{value} falls into zone #{zone}"
50
+ end
51
+
52
+
53
+ == Non-Numeric Gradients
54
+
55
+ For non-Numeric gradient value objects, you'll need to implement +interpolate+
56
+ for the class in question. Here's an example using an RGB color gradient with
57
+ the help of the 'color' gem:
58
+
59
+ require 'rubygems'
60
+ require 'interpolate'
61
+ require 'color'
62
+
63
+ # we need to implement +interpolate+ for Color::RGB
64
+ # in order for Interpolation to work
65
+ class Color::RGB
66
+ def interpolate(other, balance)
67
+ mix_with(other, balance * 100.0)
68
+ end
69
+ end
70
+
71
+ # a nice weathermap-style color gradient
72
+ points = {
73
+ 0 => Color::RGB::White,
74
+ 1 => Color::RGB::Lime,
75
+ # 2 => ? (something between Lime and Yellow)
76
+ 3 => Color::RGB::Yellow,
77
+ 4 => Color::RGB::Orange,
78
+ 5 => Color::RGB::Red,
79
+ 6 => Color::RGB::Magenta,
80
+ 7 => Color::RGB::DarkGray
81
+ }
82
+
83
+ gradient = Interpolation.new(points)
84
+
85
+ # what are the colors of the gradient from 0 to 7
86
+ # in increments of 0.2?
87
+ (0).step(7, 0.2) do |value|
88
+ color = gradient.at(value)
89
+ puts "A value of #{value} means #{color.html}"
90
+ end
91
+
92
+
93
+ == Array-based Interpolations
94
+
95
+ Aside from single value gradient points, you can interpolate over uniformly sized
96
+ arrays. Between two interpolation points, let's say +a+ and +b+, the final result
97
+ will be +c+ where <tt>c[0]</tt> is the interpolation of <tt>a[0]</tt> and
98
+ <tt>b[0]</tt> and <tt>c[1]</tt> is interpolated between <tt>a[1]</tt> and
99
+ <tt>b[1]</tt> and so on up to <tt>c[n]</tt>.
100
+
101
+ Here is an example:
102
+
103
+ require 'rubygems'
104
+ require 'interpolate'
105
+ require 'pp'
106
+
107
+ # a non-linear set of multi-dimensional points;
108
+ # perhaps the location of some actor in relation to time
109
+ time_frames = {
110
+ 0 => [0, 0, 0],
111
+ 1 => [1, 0, 0],
112
+ 2 => [0, 1, 0],
113
+ 3 => [0, 0, 2],
114
+ 4 => [3, 0, 1],
115
+ 5 => [1, 2, 3],
116
+ 6 => [0, 0, 0]
117
+ }
118
+
119
+ path = Interpolation.new(time_frames)
120
+
121
+ # play the actors positions in time increments of 0.25
122
+ (0).step(6, 0.25) do |time|
123
+ position = path.at(time)
124
+ puts ">> At #{time}s, actor is at:"
125
+ p position
126
+ end
127
+
128
+
129
+ == Nested Array Interpolations
130
+
131
+ As long as each top level array is uniformly sized in the first dimension
132
+ and each nested array is uniformly sized in the second dimension (and so
133
+ on...), multidimensional interpolation point values will just work.
134
+
135
+ Here's an example of a set of 2D points being morphed:
136
+
137
+ require 'rubygems'
138
+ require 'interpolate'
139
+ require 'pp'
140
+
141
+
142
+ # a non-linear set of 2D vertexes;
143
+ # the shape changes at each frame
144
+ time_frames = {
145
+ 0 => [[0, 0], [1, 0], [2, 0], [3, 0], [4, 0]], # a horizontal line
146
+ 1 => [[0, 0], [1, 0], [3, 0], [0, 4], [0, 0]], # a triangle
147
+ 2 => [[0, 0], [1, 0], [1, 1], [0, 1], [0, 0]], # a square
148
+ 3 => [[0, 0], [1, 0], [2, 0], [3, 0], [4, 0]], # a horizontal line, again
149
+ 4 => [[0, 0], [0, 1], [0, 2], [0, 3], [0, 4]] # a vertical line
150
+ }
151
+
152
+
153
+ paths = Interpolation.new(time_frames)
154
+
155
+ # show the vertex positions in time increments of 0.25
156
+ (0).step(4, 0.25) do |time|
157
+ points = paths.at(time)
158
+ puts ">> At #{time}s, points are:"
159
+ p points
160
+ end
161
+
162
+
163
+ == License
164
+
165
+ (The MIT License)
166
+
167
+ Copyright (c) 2008 Adam Collins [adam.w.collins@gmail.com]
168
+
169
+ Permission is hereby granted, free of charge, to any person obtaining
170
+ a copy of this software and associated documentation files (the
171
+ "Software"), to deal in the Software without restriction, including
172
+ without limitation the rights to use, copy, modify, merge, publish,
173
+ distribute, sublicense, and/or sell copies of the Software, and to
174
+ permit persons to whom the Software is furnished to do so, subject to
175
+ the following conditions:
176
+
177
+ The above copyright notice and this permission notice shall be
178
+ included in all copies or substantial portions of the Software.
11
179
 
180
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
181
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
182
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
183
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
184
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
185
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
186
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/Rakefile CHANGED
@@ -6,14 +6,12 @@ require 'interpolate'
6
6
  Hoe.new('Interpolate', Interpolation::VERSION) do |p|
7
7
  p.name = "interpolate"
8
8
  p.author = "Adam Collins"
9
- p.description = "Library for creating generic interpolations objects."
10
9
  p.email = 'adam.w.collins@gmail.com'
11
- p.summary = "Useful for such things as generating linear motion between points (or arrays of points), multi-channel color gradients, piecewise functions, or even just placing values within intervals."
12
10
  p.url = "http://interpolate.rubyforge.org"
13
- #p.clean_globs = [''] # Remove this directory on "rake clean"
11
+ p.description = File.read('README.txt').delete("\r").split(/^== /)[2].chomp.chomp
12
+ p.summary = p.description
13
+ p.changes = File.read('CHANGELOG.txt').delete("\r").split(/^== /)[1].chomp
14
14
  p.remote_rdoc_dir = '' # Release to root
15
- p.changes = p.paragraphs_of('CHANGELOG', 0..1).join("\n\n")
16
- # * extra_deps - An array of rubygem dependencies.
17
15
  end
18
16
 
19
17
  desc "Release and publish documentation"
@@ -1,245 +1,58 @@
1
- =begin rdoc
2
-
3
- Library for generic interpolation objects. Useful for such things as generating
4
- linear motion between points (or arrays of points), multi-channel color
5
- gradients, piecewise functions, or even just placing values within intervals.
6
-
7
- The only requirement is that each interpolation point value must be able to
8
- figure out how to interpolate itself to its neighbor value(s). Numeric
9
- objects and uniformly sized arrays are automatically endowed with this
10
- ability by this gem, but other classes will require an implementation
11
- of #interpolate. See the second example below for a brief demonstration
12
- using Color objects.
13
-
14
- Interpolation objects are constructed with a Hash object, wherein each key
15
- is a real number value and each value is can respond to #interpolate and
16
- determine the resulting value based on its neighbor value and the balance
17
- ratio between the two points.
18
-
19
- At or below the lower bounds of the interpolation, the result will be equal to
20
- the value of the lower bounds interpolation point. At or above the upper
21
- bounds of the graient, the result will be equal to the value of the upper
22
- bounds interpolation point.
23
-
24
-
25
- ==Author
26
-
27
- {Adam Collins}[mailto:adam.w.collins@gmail.com]
28
-
29
-
30
- ==General Usage
31
-
32
- Specify the interpolation as a Hash, where keys represent numeric points
33
- along the gradient and values represent the known values along that gradient.
34
-
35
- Here's an example for determining which of 7 zones a set of values fall into:
36
-
37
- require 'rubygems'
38
- require 'interpolate'
39
-
40
- points = {
41
- 0.000 => 0,
42
- 0.427 => 1,
43
- 1.200 => 2,
44
- 3.420 => 3,
45
- 27.50 => 4,
46
- 45.20 => 5,
47
- 124.4 => 6,
48
- }
49
-
50
- zones = Interpolation.new(points)
51
-
52
- values = [
53
- -20.2,
54
- 0.234,
55
- 65.24,
56
- 9.234,
57
- 398.4,
58
- 4000
59
- ]
60
-
61
- values.each do |value|
62
- zone = zones.at(value).floor
63
- puts "A value of #{value} falls into zone #{zone}"
64
- end
65
-
66
-
67
- ==Non-Numeric Gradients
68
-
69
- For non-Numeric gradient value objects, you'll need to implement :interpolate
70
- for the class in question. Here's an example using an RGB color gradient with
71
- the help of the 'color' gem:
72
-
73
- require 'rubygems'
74
- require 'interpolate'
75
- require 'color'
76
-
77
- # we need to implement :interpolate for Color::RGB
78
- # in order for Interpolation to work
79
- class Color::RGB
80
- def interpolate(other, balance)
81
- mix_with(other, balance * 100.0)
82
- end
83
- end
84
-
85
- # a nice weathermap-style color gradient
86
- points = {
87
- 0 => Color::RGB::White,
88
- 1 => Color::RGB::Lime,
89
- # 2 => ? (something between Lime and Yellow)
90
- 3 => Color::RGB::Yellow,
91
- 4 => Color::RGB::Orange,
92
- 5 => Color::RGB::Red,
93
- 6 => Color::RGB::Magenta,
94
- 7 => Color::RGB::DarkGray
95
- }
96
-
97
-
98
- gradient = Interpolation.new(points)
99
-
100
- # what are the colors of the gradient from 0 to 7
101
- # in increments of 0.2?
102
- (0).step(7, 0.2) do |value|
103
- color = gradient.at(value)
104
- puts "A value of #{value} means #{color.html}"
105
- end
106
-
107
-
108
- ==Array-based Interpolations
109
-
110
- Aside from single value gradient points, you can interpolate over uniformly sized
111
- arrays. Between two interpolation points, let's say +a+ and +b+, the final
112
- result will be +c+ where +c[0]+ is the interpolation of +a[0]+ and +b[0]+ and
113
- +c[1]+ is interpolated between +a[1]+ and +b[1]+ and so on up to +c[n]+.
114
-
115
- Here is an example:
116
-
117
- require 'rubygems'
118
- require 'interpolate'
119
- require 'pp'
120
-
121
- # a non-linear set of multi-dimensional points;
122
- # perhaps the location of some actor in relation to time
123
- time_frames = {
124
- 0 => [0, 0, 0],
125
- 1 => [1, 0, 0],
126
- 2 => [0, 1, 0],
127
- 3 => [0, 0, 2],
128
- 4 => [3, 0, 1],
129
- 5 => [1, 2, 3],
130
- 6 => [0, 0, 0]
131
- }
132
-
133
- path = Interpolation.new(time_frames)
134
-
135
- # play the actors positions in time increments of 0.25
136
- (0).step(6, 0.25) do |time|
137
- position = path.at(time)
138
- puts ">> At #{time}s, actor is at:"
139
- p position
140
- end
141
-
142
-
143
- ==Nested Array Interpolations
144
-
145
- As long as each top level array is uniformly sized in the first dimension
146
- and each nested array is uniformly sized in the second dimension (and so
147
- on...), multidimensional interpolation point values will just work.
148
-
149
- Here's an example of a set of 2D points being morphed:
150
-
151
- require 'rubygems'
152
- require 'interpolate'
153
- require 'pp'
154
-
155
-
156
- # a non-linear set of 2D vertexes;
157
- # the shape changes at each frame
158
- time_frames = {
159
- 0 => [[0, 0], [1, 0], [2, 0], [3, 0], [4, 0]], # a horizontal line
160
- 1 => [[0, 0], [1, 0], [3, 0], [0, 4], [0, 0]], # a triangle
161
- 2 => [[0, 0], [1, 0], [1, 1], [0, 1], [0, 0]], # a square
162
- 3 => [[0, 0], [1, 0], [2, 0], [3, 0], [4, 0]], # a horizontal line, again
163
- 4 => [[0, 0], [0, 1], [0, 2], [0, 3], [0, 4]] # a vertical line
164
- }
165
-
166
-
167
- paths = Interpolation.new(time_frames)
168
-
169
- # show the vertex positions in time increments of 0.25
170
- (0).step(4, 0.25) do |time|
171
- points = paths.at(time)
172
- puts ">> At #{time}s, points are:"
173
- p points
174
- end
175
-
176
-
177
- ==License
178
-
179
- Licensed under the MIT license.
180
-
181
- =end
182
-
183
-
184
- # all numeric objects should be supported out of the box
185
- class Numeric
186
- def interpolate(other, balance)
187
- left = self.to_f
188
- right = other.to_f
189
- delta = (right - left).to_f
190
- return left + (delta * balance)
191
- end
192
- end
193
-
194
-
195
- # a little more complicated, but there's no reason why we can't
196
- # interpolate between two equal length arrays as long as each element
197
- # responds to :interpolate
198
- class Array
199
- def interpolate(other, balance)
200
- if (self.length < 1) then
201
- raise ArgumentError, "cannot interpolate array with no values"
202
- end
203
-
204
- if (self.length != other.length) then
205
- raise ArgumentError, "cannot interpolate between arrays of different length"
206
- end
207
-
208
- final = Array.new
209
-
210
- self.each_with_index do |left, index|
211
- unless (left.respond_to? :interpolate) then
212
- raise "array element does not respond to :interpolate"
213
- end
214
-
215
- right = other[index]
216
-
217
- final[index] = left.interpolate(right, balance)
218
- end
219
-
220
- return final
221
- end
222
- end
223
-
1
+ # Library for generic interpolation objects. Useful for such things as generating
2
+ # linear motion between points (or arrays of points), multi-channel color
3
+ # gradients, piecewise functions, or even just placing values within intervals.
4
+ #
5
+ # The only requirement is that each interpolation point value must be able to
6
+ # figure out how to interpolate itself to its neighbor value(s). Numeric
7
+ # objects and uniformly sized arrays are automatically endowed with this
8
+ # ability by this gem, but other classes will require an implementation
9
+ # of +interpolate+. See the example color.rb in the examples directory for
10
+ # a brief demonstration using Color objects provided by the 'color' gem.
11
+ #
12
+ # Interpolation objects are constructed with a Hash object, wherein each key
13
+ # is a real number value and each value is can respond to +interpolate+ and
14
+ # determine the resulting value based on its neighbor value and the balance
15
+ # ratio between the two points.
16
+ #
17
+ # At or below the lower bounds of the interpolation, the result will be equal to
18
+ # the value of the lower bounds interpolation point. At or above the upper
19
+ # bounds of the graient, the result will be equal to the value of the upper
20
+ # bounds interpolation point.
21
+ #
22
+ #
23
+ # ==Author
24
+ #
25
+ # {Adam Collins}[mailto:adam.w.collins@gmail.com]
26
+ #
27
+ #
28
+ # ==License
29
+ #
30
+ # Licensed under the MIT license.
31
+ #
224
32
 
225
33
  class Interpolation
226
- VERSION = '0.2.0'
34
+ VERSION = '0.2.1' # :nodoc:
227
35
 
36
+ # creates an Interpolation object with Hash object that specifies
37
+ # each point location (Numeric) and value (up to you)
228
38
  def initialize(points = {})
229
39
  @points = {}
230
- add!(points)
40
+ merge!(points)
231
41
  end
232
42
 
233
- def add(points = {})
43
+ # creates an Interpolation object from the receiver object,
44
+ # merged with the interpolated points you specify
45
+ def merge(points = {})
234
46
  Interpolation.new(points.merge(@points))
235
47
  end
236
48
 
237
- def add!(points = {})
49
+ # merges the interpolation points with the receiver object
50
+ def merge!(points = {})
238
51
  @points.merge!(points)
239
52
  normalize_data
240
53
  end
241
54
 
242
-
55
+ # returns the interpolated value of the receiver object at the point specified
243
56
  def at(point)
244
57
  # deal with the two out-of-bounds cases first
245
58
  if (point <= @min_point)
@@ -285,7 +98,7 @@ class Interpolation
285
98
 
286
99
  private
287
100
 
288
- def normalize_data
101
+ def normalize_data # :nodoc:
289
102
  @data = @points.sort
290
103
  @min_point = @data.first.first
291
104
  @max_point = @data.last.first
@@ -302,3 +115,42 @@ class Interpolation
302
115
  end
303
116
 
304
117
 
118
+ # all numeric objects should be supported
119
+ class Numeric # :nodoc:
120
+ def interpolate(other, balance)
121
+ left = self.to_f
122
+ right = other.to_f
123
+ delta = (right - left).to_f
124
+ return left + (delta * balance)
125
+ end
126
+ end
127
+
128
+
129
+ # a little more complicated, but there's no reason why we can't
130
+ # interpolate between two equal length arrays as long as each element
131
+ # responds to +interpolate+
132
+ class Array # :nodoc:
133
+ def interpolate(other, balance)
134
+ if (self.length < 1) then
135
+ raise ArgumentError, "cannot interpolate array with no values"
136
+ end
137
+
138
+ if (self.length != other.length) then
139
+ raise ArgumentError, "cannot interpolate between arrays of different length"
140
+ end
141
+
142
+ final = Array.new
143
+
144
+ self.each_with_index do |left, index|
145
+ unless (left.respond_to? :interpolate) then
146
+ raise "array element does not respond to :interpolate"
147
+ end
148
+
149
+ right = other[index]
150
+
151
+ final[index] = left.interpolate(right, balance)
152
+ end
153
+
154
+ return final
155
+ end
156
+ end
@@ -79,7 +79,7 @@ class InterpolationTest < Test::Unit::TestCase
79
79
  assert_in_delta(@dec_gradient.at(3.5701), 0.35701, DELTA)
80
80
  end
81
81
 
82
- def test_gradient_add
82
+ def test_gradient_merge
83
83
  new_points = {
84
84
  11 => 1.1,
85
85
  12 => 1.2,
@@ -94,7 +94,7 @@ class InterpolationTest < Test::Unit::TestCase
94
94
  }
95
95
 
96
96
  original = @dec_gradient.dup
97
- expanded = original.add(new_points)
97
+ expanded = original.merge(new_points)
98
98
 
99
99
  assert_equal(original.at(5), 0.5)
100
100
  assert_equal(expanded.at(5), 0.5)
@@ -103,7 +103,7 @@ class InterpolationTest < Test::Unit::TestCase
103
103
  assert_equal(expanded.at(15), 1.5)
104
104
  end
105
105
 
106
- def test_gradient_add!
106
+ def test_gradient_merge!
107
107
  new_points = {
108
108
  11 => 1.1,
109
109
  12 => 1.2,
@@ -119,7 +119,7 @@ class InterpolationTest < Test::Unit::TestCase
119
119
 
120
120
  original = @dec_gradient.dup
121
121
  expanded = original.dup
122
- expanded.add!(new_points)
122
+ expanded.merge!(new_points)
123
123
 
124
124
  assert_equal(original.at(5), 0.5)
125
125
  assert_equal(expanded.at(5), 0.5)
metadata CHANGED
@@ -1,15 +1,36 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: interpolate
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adam Collins
8
8
  autorequire:
9
9
  bindir: bin
10
- cert_chain: []
10
+ cert_chain:
11
+ - |
12
+ -----BEGIN CERTIFICATE-----
13
+ MIIDPjCCAiagAwIBAgIBADANBgkqhkiG9w0BAQUFADBFMRcwFQYDVQQDDA5hZGFt
14
+ LncuY29sbGluczEVMBMGCgmSJomT8ixkARkWBWdtYWlsMRMwEQYKCZImiZPyLGQB
15
+ GRYDY29tMB4XDTA4MDEyNDA4NTEyOFoXDTA5MDEyMzA4NTEyOFowRTEXMBUGA1UE
16
+ AwwOYWRhbS53LmNvbGxpbnMxFTATBgoJkiaJk/IsZAEZFgVnbWFpbDETMBEGCgmS
17
+ JomT8ixkARkWA2NvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMP8
18
+ 3Nz8g1K+Z4p59/keyov5ihFgzJuhlnvbRLr0y2jtDybeyc0TSMnY7sjhx+T0yVI5
19
+ 9tEtUMo3d2m0woaHw7kc3VAo68GQKGAN02bdaPc4ODcObL9DAr8Y3CCwml5CiLtX
20
+ L5Lz8zO9EU6jv6bTecRW5DsY9nPjc/TLqXjYxDgSL8dppBmHs2k82bJCaCaTFj9M
21
+ ORRZpdkdTBdecI7p8DKt2WAX12deT/XUan7mpiBChKJsNVpcAe6CUqVfb6hMGA95
22
+ KtW+GxvK6F6UgkcFG8ljrXks8Dfm4jMYVkpmw1YUGYU9Wj9R8X94ecAi9By/ngJ7
23
+ svhO6ouvVk9J9hgpWukCAwEAAaM5MDcwCQYDVR0TBAIwADALBgNVHQ8EBAMCBLAw
24
+ HQYDVR0OBBYEFIpBCufIdqpuVqh/Mt46Gq9FKa0pMA0GCSqGSIb3DQEBBQUAA4IB
25
+ AQBbwpirH1tNzkESxQIBZd10xK3Dca141G9+lHl7OK3UCk1ZF6TiXxgl7Qnug4A5
26
+ 3mEn/catvIdMYcA1GLNWL7qlW2Fpk2w0qgVbx1agK724BrZm5Op6lain+vi6BXd3
27
+ QM32MqZAL96e40i6UCutsNIdZeRDfR7hRcmqPTkoSUEu/3X6qegnvJHpVw36dsG6
28
+ trlR7ps6/GSlnZNkD5TayaybO3TiA+KGA19/zQhO6DMPds+swW0Jz7xv2VBzIWg5
29
+ RAnseWJ5nOAftsE9D1NGp3TEH+ceNKO3IP0OtDl9L2F0a/9XbPJdmsaQR+FPX30Z
30
+ xJc09X9KG2jBdxa4tp+uy7KZ
31
+ -----END CERTIFICATE-----
11
32
 
12
- date: 2008-01-24 00:00:00 -08:00
33
+ date: 2008-01-27 00:00:00 -08:00
13
34
  default_executable:
14
35
  dependencies:
15
36
  - !ruby/object:Gem::Dependency
@@ -21,18 +42,20 @@ dependencies:
21
42
  - !ruby/object:Gem::Version
22
43
  version: 1.4.0
23
44
  version:
24
- description: Library for creating generic interpolations objects.
45
+ description: Description Library for generic Interpolation objects. Useful for such things as generating linear motion between points (or arrays of points), multi-channel color gradients, piecewise functions, or even just placing values within intervals.
25
46
  email: adam.w.collins@gmail.com
26
47
  executables: []
27
48
 
28
49
  extensions: []
29
50
 
30
51
  extra_rdoc_files:
52
+ - CHANGELOG.txt
53
+ - LICENSE.txt
31
54
  - Manifest.txt
32
55
  - README.txt
33
56
  files:
34
- - CHANGELOG
35
- - MIT-LICENSE
57
+ - CHANGELOG.txt
58
+ - LICENSE.txt
36
59
  - Manifest.txt
37
60
  - README.txt
38
61
  - Rakefile
@@ -68,6 +91,6 @@ rubyforge_project: interpolate
68
91
  rubygems_version: 1.0.1
69
92
  signing_key:
70
93
  specification_version: 2
71
- summary: Useful for such things as generating linear motion between points (or arrays of points), multi-channel color gradients, piecewise functions, or even just placing values within intervals.
94
+ summary: Description Library for generic Interpolation objects. Useful for such things as generating linear motion between points (or arrays of points), multi-channel color gradients, piecewise functions, or even just placing values within intervals.
72
95
  test_files:
73
96
  - test/test_all.rb
Binary file
data/CHANGELOG DELETED
@@ -1,17 +0,0 @@
1
- == 0.2.0
2
-
3
- * Changed the library name to "interpolate"
4
- * Added Array#interpolate that covers uniform arrays and nested arrays
5
- * Added more tests, documentation, and examples
6
-
7
- == 0.1.0
8
-
9
- * Gadient calls :interpolate on values for OOP goodness
10
- * Checks added for respond_to? :interpolate on values
11
- * Added Numeric#interpolate
12
-
13
- == 0.0.1
14
-
15
- * Initial coding
16
- * N-sized arbitrary floating point gradients
17
-