numerix 1.0.0
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.
- checksums.yaml +7 -0
- data/.gitignore +18 -0
- data/.travis.yml +5 -0
- data/.yardopts +5 -0
- data/CODE_OF_CONDUCT.md +74 -0
- data/Gemfile +6 -0
- data/LICENSE.txt +21 -0
- data/README.md +66 -0
- data/Rakefile +18 -0
- data/TODO.txt +25 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/ext/numerix/common.h +107 -0
- data/ext/numerix/extconf.rb +3 -0
- data/ext/numerix/matrix3x2.c +638 -0
- data/ext/numerix/matrix3x2.h +52 -0
- data/ext/numerix/matrix4x4.c +1807 -0
- data/ext/numerix/matrix4x4.h +90 -0
- data/ext/numerix/matrix_base.c +307 -0
- data/ext/numerix/matrix_base.h +70 -0
- data/ext/numerix/numerix.c +33 -0
- data/ext/numerix/numerix.h +19 -0
- data/ext/numerix/plane.c +311 -0
- data/ext/numerix/plane.h +34 -0
- data/ext/numerix/quaternion.c +712 -0
- data/ext/numerix/quaternion.h +53 -0
- data/ext/numerix/structure.c +154 -0
- data/ext/numerix/structure.h +24 -0
- data/ext/numerix/vector.c +326 -0
- data/ext/numerix/vector.h +57 -0
- data/ext/numerix/vector2.c +641 -0
- data/ext/numerix/vector2.h +64 -0
- data/ext/numerix/vector3.c +805 -0
- data/ext/numerix/vector3.h +68 -0
- data/ext/numerix/vector4.c +727 -0
- data/ext/numerix/vector4.h +63 -0
- data/ext/numerix/vector_base.c +94 -0
- data/ext/numerix/vector_base.h +30 -0
- data/extra/numerix128.png +0 -0
- data/extra/numerix24.png +0 -0
- data/extra/numerix32.png +0 -0
- data/extra/numerix320.png +0 -0
- data/extra/numerix48.png +0 -0
- data/extra/numerix96.png +0 -0
- data/lib/numerix/error.rb +36 -0
- data/lib/numerix/matrix3x2.rb +420 -0
- data/lib/numerix/matrix4x4.rb +676 -0
- data/lib/numerix/matrix_base.rb +14 -0
- data/lib/numerix/plane.rb +154 -0
- data/lib/numerix/quaternion.rb +355 -0
- data/lib/numerix/structure.rb +124 -0
- data/lib/numerix/vector.rb +13 -0
- data/lib/numerix/vector2.rb +534 -0
- data/lib/numerix/vector3.rb +572 -0
- data/lib/numerix/vector4.rb +551 -0
- data/lib/numerix/vector_base.rb +14 -0
- data/lib/numerix/version.rb +6 -0
- data/lib/numerix.rb +10 -0
- data/numerix.gemspec +30 -0
- metadata +167 -0
@@ -0,0 +1,551 @@
|
|
1
|
+
module Numerix
|
2
|
+
|
3
|
+
##
|
4
|
+
# A structure encapsulating four single precision floating point values.
|
5
|
+
class Vector4 < VectorBase
|
6
|
+
|
7
|
+
##
|
8
|
+
# @return [Float] the X component of the vector.
|
9
|
+
attr_accessor :x
|
10
|
+
|
11
|
+
##
|
12
|
+
# @return [Float] the Y component of the vector.
|
13
|
+
attr_accessor :y
|
14
|
+
|
15
|
+
##
|
16
|
+
# @return [Float] the Z component of the vector.
|
17
|
+
attr_accessor :z
|
18
|
+
|
19
|
+
##
|
20
|
+
# @return [Float] the W component of the vector.
|
21
|
+
attr_accessor :w
|
22
|
+
|
23
|
+
##
|
24
|
+
# @overload initialize
|
25
|
+
# Creates a Vector with the default values of `0.0`.
|
26
|
+
#
|
27
|
+
# @overload initialize(xyzw)
|
28
|
+
# Creates a Vector with each component set to a single value.
|
29
|
+
#
|
30
|
+
# @param xyzw [Float] The value to set for all components.
|
31
|
+
#
|
32
|
+
# @overload initialize(x, y, z, w)
|
33
|
+
# Creates a Vector with the specified values.
|
34
|
+
#
|
35
|
+
# @param x [Float] The X component of the vector.
|
36
|
+
# @param y [Float] The Y component of the vector.
|
37
|
+
# @param z [Float] The Z component of the vector.
|
38
|
+
# @param w [Float] The W component of the vector.
|
39
|
+
#
|
40
|
+
# @overload initialize(xyz, w)
|
41
|
+
# Creates a Vector with the specified values.
|
42
|
+
#
|
43
|
+
# @param xyz [Vector3] Vector3 to use for the X, Y, and Z components.
|
44
|
+
# @param w [Float] The W component of the vector.
|
45
|
+
#
|
46
|
+
# @overload initialize(xy, zw)
|
47
|
+
# Creates a Vector with the specified values.
|
48
|
+
#
|
49
|
+
# @param xy [Vector2] Vector2 to use for the X and Y components.
|
50
|
+
# @param zw [Vector2] Vector2 to use for the Z and W components.
|
51
|
+
#
|
52
|
+
# @overload initialize(xy, z, w)
|
53
|
+
# Creates a Vector with the specified values.
|
54
|
+
#
|
55
|
+
# @param xy [Vector2] Vector2 to use for the X and Y components.
|
56
|
+
# @param z [Float] The Z component of the vector.
|
57
|
+
# @param w [Float] The W component of the vector.
|
58
|
+
#
|
59
|
+
def initialize(*args)
|
60
|
+
end
|
61
|
+
|
62
|
+
##
|
63
|
+
# The equivalent of `Enumerable#map`, but returns a vector object instead of
|
64
|
+
# an Array.
|
65
|
+
#
|
66
|
+
# Invokes the given block once for each element of `self`.
|
67
|
+
#
|
68
|
+
# Creates a new vector containing the values returned by the block.
|
69
|
+
#
|
70
|
+
# @yield [component] Yields a component of the vector to the block.
|
71
|
+
# @yieldparam component [Float] The yielded component.
|
72
|
+
#
|
73
|
+
# @return [Vector4]
|
74
|
+
|
75
|
+
# @see map!
|
76
|
+
def map
|
77
|
+
end
|
78
|
+
|
79
|
+
##
|
80
|
+
# Invokes the given block once for each element of self, replacing the
|
81
|
+
# element with the value returned by the block.
|
82
|
+
#
|
83
|
+
# The values of the vector are altered without creating a ne object.
|
84
|
+
#
|
85
|
+
# @yield [component] Yields a component of the vector to the block.
|
86
|
+
# @yieldparam component [Float] The yielded component.
|
87
|
+
#
|
88
|
+
# @return [self]
|
89
|
+
#
|
90
|
+
# @see map
|
91
|
+
def map!
|
92
|
+
end
|
93
|
+
|
94
|
+
alias_method :collect, :map
|
95
|
+
alias_method :collect!, :map!
|
96
|
+
|
97
|
+
##
|
98
|
+
# Raises the vector to the given power.
|
99
|
+
#
|
100
|
+
# @param exponent [Float] The power to raise the vector to.
|
101
|
+
#
|
102
|
+
# @return [Vector4] New vector that is result of the operation.
|
103
|
+
def **(exponent)
|
104
|
+
end
|
105
|
+
|
106
|
+
##
|
107
|
+
# @return [Float] the length of the vector.
|
108
|
+
def length
|
109
|
+
end
|
110
|
+
|
111
|
+
alias_method :magnitude, :length
|
112
|
+
|
113
|
+
##
|
114
|
+
# @return [Float] the length of the vector squared.
|
115
|
+
def length_squared
|
116
|
+
end
|
117
|
+
|
118
|
+
##
|
119
|
+
# @return [Boolean] flag indicating if all values of the vector are equal
|
120
|
+
# to `1.0`.
|
121
|
+
def one?
|
122
|
+
end
|
123
|
+
|
124
|
+
##
|
125
|
+
# @return [Boolean] flag indicating if all values of the vector are equal
|
126
|
+
# to `0.0`.
|
127
|
+
def zero?
|
128
|
+
end
|
129
|
+
|
130
|
+
##
|
131
|
+
# @return [Float] the lowest value of the vector's components.
|
132
|
+
def min_value
|
133
|
+
end
|
134
|
+
|
135
|
+
##
|
136
|
+
# @return [Float] the greatest value of the vector's components.
|
137
|
+
def max_value
|
138
|
+
end
|
139
|
+
|
140
|
+
##
|
141
|
+
# Returns the Euclidean distance between this vector and another.
|
142
|
+
#
|
143
|
+
# @param vector [Vector4] The point to get distance between.
|
144
|
+
#
|
145
|
+
# @return [Float] the distance.
|
146
|
+
def distance(vector)
|
147
|
+
end
|
148
|
+
|
149
|
+
# Returns the squared Euclidean distance between this vector and another.
|
150
|
+
#
|
151
|
+
# @param vector [Vector4] The point to get distance between.
|
152
|
+
#
|
153
|
+
# @return [Float] the distance squared.
|
154
|
+
def distance_squared(vector)
|
155
|
+
end
|
156
|
+
|
157
|
+
##
|
158
|
+
# Returns a new vector with the same direction as the given vector, but with
|
159
|
+
# a length of `1.0`.
|
160
|
+
#
|
161
|
+
# @return [Vector4] a normalized vector.
|
162
|
+
def normalize
|
163
|
+
end
|
164
|
+
|
165
|
+
##
|
166
|
+
# Alters this vector instance to maintain same direction, but adjust values
|
167
|
+
# so that vector has a length of `1.0`.
|
168
|
+
#
|
169
|
+
# @return [self]
|
170
|
+
def normalize!
|
171
|
+
end
|
172
|
+
|
173
|
+
##
|
174
|
+
# Linearly interpolates between this vector and another based on the given
|
175
|
+
# weighting.
|
176
|
+
#
|
177
|
+
# @param vector [Vector4] The source vector to interpolate between.
|
178
|
+
# @param amount [Float] Value between `0.0` and `1.0` indicating the weight
|
179
|
+
# of the given vector.
|
180
|
+
#
|
181
|
+
# @return [Vector4] the interpolated vector.
|
182
|
+
#
|
183
|
+
# @see lerp!
|
184
|
+
def lerp(vector, amount)
|
185
|
+
end
|
186
|
+
|
187
|
+
##
|
188
|
+
# Linearly interpolates between this vector and another based on the given
|
189
|
+
# weighting, altering the values of this vector.
|
190
|
+
#
|
191
|
+
# @param vector [Vector4] The source vector to interpolate between.
|
192
|
+
# @param amount [Float] Value between `0.0` and `1.0` indicating the weight
|
193
|
+
# of the given vector.
|
194
|
+
#
|
195
|
+
# @return [self]
|
196
|
+
#
|
197
|
+
# @see lerp
|
198
|
+
def lerp!(vector, amount)
|
199
|
+
end
|
200
|
+
|
201
|
+
##
|
202
|
+
# Returns a new vector by applying a transformation.
|
203
|
+
#
|
204
|
+
# @overload transform(matrix)
|
205
|
+
# Transforms this vector by the given matrix.
|
206
|
+
#
|
207
|
+
# @param matrix [Matrix4x4] the transformation matrix.
|
208
|
+
#
|
209
|
+
# @overload transform(rotation)
|
210
|
+
# Transforms this vector by the specified rotation value.
|
211
|
+
#
|
212
|
+
# @param rotation [Quaternion] The rotation to apply.
|
213
|
+
#
|
214
|
+
# @return [Vector4] new transformed vector.
|
215
|
+
#
|
216
|
+
# @see transform!
|
217
|
+
def transform(other)
|
218
|
+
end
|
219
|
+
|
220
|
+
##
|
221
|
+
# Transforms this vector.
|
222
|
+
#
|
223
|
+
# @overload transform(matrix)
|
224
|
+
# Transforms this vector by the given matrix.
|
225
|
+
#
|
226
|
+
# @param matrix [Matrix4x4] the transformation matrix.
|
227
|
+
#
|
228
|
+
# @overload transform(rotation)
|
229
|
+
# Transforms this vector by the specified rotation value.
|
230
|
+
#
|
231
|
+
# @param rotation [Quaternion] The rotation to apply.
|
232
|
+
#
|
233
|
+
# @return [self]
|
234
|
+
#
|
235
|
+
# @see transform
|
236
|
+
def transform!(other)
|
237
|
+
end
|
238
|
+
|
239
|
+
# @return [Vector4] a vector whose elements are the absolute values of each
|
240
|
+
# of this vector's elements.
|
241
|
+
def abs
|
242
|
+
end
|
243
|
+
|
244
|
+
# @return [Vector4] a vector whose elements are the square root of each of
|
245
|
+
# this vector's elements.
|
246
|
+
def sqrt
|
247
|
+
end
|
248
|
+
|
249
|
+
##
|
250
|
+
# Returns the dot product of this vector and another.
|
251
|
+
#
|
252
|
+
# @param other [Vector4] the source vector to compute dot product of.
|
253
|
+
#
|
254
|
+
# @return [Float] the dot product.
|
255
|
+
def dot(other)
|
256
|
+
end
|
257
|
+
|
258
|
+
##
|
259
|
+
# Returns a vector that is result of clamping this vector between the
|
260
|
+
# specified minimum and maximum values.
|
261
|
+
#
|
262
|
+
# @overload clamp(min, max)
|
263
|
+
# Clamps the vector's components between the specified values.
|
264
|
+
#
|
265
|
+
# @param min [Float] The minimum value.
|
266
|
+
# @param max [Float] The maximum value.
|
267
|
+
#
|
268
|
+
# @overload clamp(min, max)
|
269
|
+
# Clamps the vector's on a component-wise basis between the minimum and
|
270
|
+
# maximum values of the specified vectors.
|
271
|
+
#
|
272
|
+
# @param min [Vector4] The minimum value.
|
273
|
+
# @param max [Vector4] The maximum value.
|
274
|
+
#
|
275
|
+
# @return [Vector4] the result of clamping this vector.
|
276
|
+
#
|
277
|
+
# @see clamp!
|
278
|
+
def clamp(min, max)
|
279
|
+
end
|
280
|
+
|
281
|
+
##
|
282
|
+
# Clamps this vector between the specified minimum and maximum values.
|
283
|
+
#
|
284
|
+
# @overload clamp!(min, max)
|
285
|
+
# Clamps the vector's components between the specified values.
|
286
|
+
#
|
287
|
+
# @param min [Float] The minimum value.
|
288
|
+
# @param max [Float] The maximum value.
|
289
|
+
#
|
290
|
+
# @overload clamp!(min, max)
|
291
|
+
# Clamps the vector's on a component-wise basis between the minimum and
|
292
|
+
# maximum values of the specified vectors.
|
293
|
+
#
|
294
|
+
# @param min [Vector4] The minimum value.
|
295
|
+
# @param max [Vector4] The maximum value.
|
296
|
+
#
|
297
|
+
# @return [Vector4]
|
298
|
+
#
|
299
|
+
# @see clamp
|
300
|
+
def clamp!(min, max)
|
301
|
+
end
|
302
|
+
|
303
|
+
##
|
304
|
+
# @return [String] a String representation of this instance.
|
305
|
+
def to_s
|
306
|
+
end
|
307
|
+
|
308
|
+
##
|
309
|
+
# @return [Array<Float>] an Array representation of this instance.
|
310
|
+
def to_a
|
311
|
+
end
|
312
|
+
|
313
|
+
alias_method :elements, :to_a
|
314
|
+
|
315
|
+
##
|
316
|
+
# @return [Hash{Symbol => Float}] a Hash representation of this instance.
|
317
|
+
def to_h
|
318
|
+
end
|
319
|
+
|
320
|
+
##
|
321
|
+
# @return [Quaternion] a {Quaternion} representation of this instance.
|
322
|
+
def to_quaternion
|
323
|
+
end
|
324
|
+
|
325
|
+
##
|
326
|
+
# @return [Plane] a {Plane} representation of this instance.
|
327
|
+
def to_plane
|
328
|
+
end
|
329
|
+
|
330
|
+
##
|
331
|
+
# @return [Vector2] a {Vector2} representation of this instance.
|
332
|
+
def to_vec2
|
333
|
+
end
|
334
|
+
|
335
|
+
##
|
336
|
+
# @return [Vector3] a {Vector3} representation of this instance.
|
337
|
+
def to_vec3
|
338
|
+
end
|
339
|
+
|
340
|
+
##
|
341
|
+
# Adds this vector with another.
|
342
|
+
#
|
343
|
+
# @param other [Vector4] The vector to add.
|
344
|
+
#
|
345
|
+
# @return [Vector4] the sum of the vectors.
|
346
|
+
def +(other)
|
347
|
+
end
|
348
|
+
|
349
|
+
# Gets the difference of this vector and another.
|
350
|
+
#
|
351
|
+
# @param other [Vector4] The vector to subtract.
|
352
|
+
#
|
353
|
+
# @return [Vector4] the difference of the vectors.
|
354
|
+
def -(other)
|
355
|
+
end
|
356
|
+
|
357
|
+
##
|
358
|
+
# Vector multiplication.
|
359
|
+
#
|
360
|
+
# @overload *(scalar)
|
361
|
+
# Scalar vector multiplication.
|
362
|
+
#
|
363
|
+
# @param scalar [Float] The scalar value.
|
364
|
+
#
|
365
|
+
# @overload *(other)
|
366
|
+
# Multiplies this vector by another.
|
367
|
+
#
|
368
|
+
# @param other [Vector4] The source vector to multiply.
|
369
|
+
#
|
370
|
+
# @return [Vector4] the product vector.
|
371
|
+
def *(other)
|
372
|
+
end
|
373
|
+
|
374
|
+
##
|
375
|
+
# Vector division.
|
376
|
+
#
|
377
|
+
# @overload *(scalar)
|
378
|
+
# Scalar vector division.
|
379
|
+
#
|
380
|
+
# @param scalar [Float] The scalar value.
|
381
|
+
#
|
382
|
+
# @overload *(other)
|
383
|
+
# Divides this vector by another.
|
384
|
+
#
|
385
|
+
# @param other [Vector4] The source vector to divide.
|
386
|
+
#
|
387
|
+
# @return [Vector4] the resulting vector.
|
388
|
+
def /(other)
|
389
|
+
end
|
390
|
+
|
391
|
+
##
|
392
|
+
# Returns flag if this vector instance is equal to the given object.
|
393
|
+
#
|
394
|
+
# @param other [Object] The object to compare.
|
395
|
+
#
|
396
|
+
# @return [Boolean] `true` if objects are equal, otherwise `false`.
|
397
|
+
def ==(other)
|
398
|
+
end
|
399
|
+
|
400
|
+
##
|
401
|
+
# Performs unary negation on this vector instance.
|
402
|
+
#
|
403
|
+
# @return [Vector4] the vector with swapped +/- values.
|
404
|
+
def -@
|
405
|
+
end
|
406
|
+
|
407
|
+
class << self
|
408
|
+
|
409
|
+
##
|
410
|
+
# @return [Vector4] the vector `<0.0, 0.0, 0.0, 0.0>`.
|
411
|
+
def zero
|
412
|
+
end
|
413
|
+
|
414
|
+
##
|
415
|
+
# @return [Vector4] the vector `<1.0, 1.0, 1.0, 1.0>`.
|
416
|
+
def one
|
417
|
+
end
|
418
|
+
|
419
|
+
##
|
420
|
+
# @return [Vector4] the vector `<1.0, 0.0, 0.0, 0.0>`.
|
421
|
+
def unit_x
|
422
|
+
end
|
423
|
+
|
424
|
+
##
|
425
|
+
# @return [Vector4] the vector `<0.0, 1.0, 0.0, 0.0>`.
|
426
|
+
def unit_y
|
427
|
+
end
|
428
|
+
|
429
|
+
##
|
430
|
+
# @return [Vector4] the vector `<0.0, 0.0, 1.0, 0.0>`.
|
431
|
+
def unit_z
|
432
|
+
end
|
433
|
+
|
434
|
+
##
|
435
|
+
# @return [Vector4] the vector `<0.0, 0.0, 0.0, 1.0>`.
|
436
|
+
def unit_w
|
437
|
+
end
|
438
|
+
|
439
|
+
##
|
440
|
+
# Creates and returns a normalized vector from the specified components.
|
441
|
+
#
|
442
|
+
# This is more efficient than creating and then normalizing.
|
443
|
+
#
|
444
|
+
# @param x [Float] The X component of the vector.
|
445
|
+
# @param y [Float] The Y component of the vector.
|
446
|
+
# @param z [Float] The Z component of the vector.
|
447
|
+
# @param w [Float] The W component of the vector.
|
448
|
+
#
|
449
|
+
# @return [Vector4] the newly created normalized vector.
|
450
|
+
def create_norm(x, y, z, w)
|
451
|
+
end
|
452
|
+
|
453
|
+
##
|
454
|
+
# Returns a vector that is result of clamping a vector between the
|
455
|
+
# specified minimum and maximum values.
|
456
|
+
#
|
457
|
+
# @overload clamp(min, max)
|
458
|
+
# Clamps the vector's components between the specified values.
|
459
|
+
#
|
460
|
+
# @param min [Float] The minimum value.
|
461
|
+
# @param max [Float] The maximum value.
|
462
|
+
#
|
463
|
+
# @overload clamp(min, max)
|
464
|
+
# Clamps the vector's on a component-wise basis between the minimum and
|
465
|
+
# maximum values of the specified vectors.
|
466
|
+
#
|
467
|
+
# @param min [Vector4] The minimum value.
|
468
|
+
# @param max [Vector4] The maximum value.
|
469
|
+
#
|
470
|
+
# @return [Vector4] the result of clamping this vector.
|
471
|
+
def clamp(vector, min, max)
|
472
|
+
end
|
473
|
+
|
474
|
+
##
|
475
|
+
# Linearly interpolates between two vectors based on the given weighting.
|
476
|
+
#
|
477
|
+
# @param vector1 [Vector4] The first source vector.
|
478
|
+
# @param vector2 [Vector4] The second source vector.
|
479
|
+
# @param amount [Float] Value between `0.0` and `1.0` indicating the
|
480
|
+
# weight of the second source vector.
|
481
|
+
#
|
482
|
+
# @return [Vector4] the interpolated vector.
|
483
|
+
def lerp(vector1, vector2, amount)
|
484
|
+
end
|
485
|
+
|
486
|
+
##
|
487
|
+
# Creates a Vector4 by transforming the specified vector and
|
488
|
+
# transformation matrix or quaternion rotation.
|
489
|
+
#
|
490
|
+
# @overload transform(vector, matrix)
|
491
|
+
# Transforms a vector by the given matrix.
|
492
|
+
#
|
493
|
+
# @param vector [Vector2, Vector3, Vector4] The source vector.
|
494
|
+
# @param matrix [Matrix4x4] The transformation matrix.
|
495
|
+
#
|
496
|
+
# @return [Vector4] A transformed vector.
|
497
|
+
#
|
498
|
+
# @overload transform(vector, rotation)
|
499
|
+
# Transforms a vector by the given Quaternion rotation value.
|
500
|
+
#
|
501
|
+
# @param vector [Vector2, Vector3, Vector4] The source vector to rotate.
|
502
|
+
# @param rotation [Quaternion] The rotation to apply.
|
503
|
+
#
|
504
|
+
# @return [Vector4] A rotated vector.
|
505
|
+
def transform(vector, other)
|
506
|
+
end
|
507
|
+
|
508
|
+
##
|
509
|
+
# Returns a vector with a minimum set of values.
|
510
|
+
#
|
511
|
+
# @overload min(vector, other)
|
512
|
+
# Returns a vector whose elements are the minimum of each of the pairs
|
513
|
+
# of elements in the two source vectors.
|
514
|
+
#
|
515
|
+
# @param vector [Vector4] The first source vector.
|
516
|
+
# @param other [Vector4] The second source vector.
|
517
|
+
#
|
518
|
+
# @overload min(vector, value)
|
519
|
+
# Returns a vector whose elements are the minimum of each of vector
|
520
|
+
# element and the specified value.
|
521
|
+
#
|
522
|
+
# @param vector [Vector4] The source vector.
|
523
|
+
# @param value [Float] The minimum value.
|
524
|
+
#
|
525
|
+
# @return [Vector4] the minimized vector.
|
526
|
+
def min(vector, other)
|
527
|
+
end
|
528
|
+
|
529
|
+
##
|
530
|
+
# Returns a vector with a maximum set of values.
|
531
|
+
#
|
532
|
+
# @overload max(vector, other)
|
533
|
+
# Returns a vector whose elements are the maximum of each of the pairs
|
534
|
+
# of elements in the two source vectors.
|
535
|
+
#
|
536
|
+
# @param vector [Vector4] The first source vector.
|
537
|
+
# @param other [Vector4] The second source vector.
|
538
|
+
#
|
539
|
+
# @overload max(vector, value)
|
540
|
+
# Returns a vector whose elements are the maximum of each of vector
|
541
|
+
# element and the specified value.
|
542
|
+
#
|
543
|
+
# @param vector [Vector4] The source vector.
|
544
|
+
# @param value [Float] The maximum value.
|
545
|
+
#
|
546
|
+
# @return [Vector4] the maximized vector.
|
547
|
+
def max(vector, other)
|
548
|
+
end
|
549
|
+
end
|
550
|
+
end
|
551
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module Numerix
|
2
|
+
|
3
|
+
##
|
4
|
+
# @abstract Abstract base class for Vector objects.
|
5
|
+
#
|
6
|
+
# This class cannot be instantiated, it of only for providing a common base
|
7
|
+
# class for vector types.
|
8
|
+
class VectorBase < Structure
|
9
|
+
|
10
|
+
private_class_method :new
|
11
|
+
|
12
|
+
include Enumerable
|
13
|
+
end
|
14
|
+
end
|
data/lib/numerix.rb
ADDED
data/numerix.gemspec
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
|
2
|
+
lib = File.expand_path("../lib", __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require "numerix/version"
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "numerix"
|
8
|
+
spec.version = Numerix::VERSION
|
9
|
+
spec.authors = ["Eric Freed"]
|
10
|
+
spec.email = ["efreed09@gmail.com"]
|
11
|
+
|
12
|
+
spec.summary = %q{High performance vector and matrix C extension for fast vector math and simplified interop.}
|
13
|
+
spec.description = %q{Numerix strives to make working with vectors more "Ruby-like", and far exceeds Ruby's built-in implementations many times over in regards to speed and performance. Great care has been take to make the library "interop" friendly, where each class can easily be passed as a "pointer" or binary string for interop with native libraries, using Ruby's Fiddle, FFI, or even Ruby's legacy Win32API. Numerix has been built from the ground-up for Ruby, not playing middle-man between Ruby and an existing library, and is optimized specifically for it, with focus on speed and a robust collection of functionality. }
|
14
|
+
spec.homepage = "https://github.com/ForeverZer0/numerix"
|
15
|
+
spec.license = "MIT"
|
16
|
+
|
17
|
+
spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
|
18
|
+
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
19
|
+
end
|
20
|
+
|
21
|
+
spec.bindir = "exe"
|
22
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
23
|
+
spec.require_paths = ["lib"]
|
24
|
+
spec.extensions = ["ext/numerix/extconf.rb"]
|
25
|
+
|
26
|
+
spec.add_development_dependency "bundler", "~> 1.16"
|
27
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
28
|
+
spec.add_development_dependency "rake-compiler", '~> 0'
|
29
|
+
spec.add_development_dependency "minitest", "~> 5.0"
|
30
|
+
end
|