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,676 @@
|
|
1
|
+
module Numerix
|
2
|
+
|
3
|
+
##
|
4
|
+
# A structure encapsulating a 4x4 matrix.
|
5
|
+
class Matrix4x4 < MatrixBase
|
6
|
+
|
7
|
+
##
|
8
|
+
# @return [Float] Value at row 1, column 1 of the matrix.
|
9
|
+
attr_accessor :m11
|
10
|
+
|
11
|
+
##
|
12
|
+
# @return [Float] Value at row 1, column 2 of the matrix.
|
13
|
+
attr_accessor :m12
|
14
|
+
|
15
|
+
##
|
16
|
+
# @return [Float] Value at row 1, column 3 of the matrix.
|
17
|
+
attr_accessor :m13
|
18
|
+
|
19
|
+
##
|
20
|
+
# @return [Float] Value at row 1, column 4 of the matrix.
|
21
|
+
attr_accessor :m14
|
22
|
+
|
23
|
+
##
|
24
|
+
# @return [Float] Value at row 2, column 1 of the matrix.
|
25
|
+
attr_accessor :m21
|
26
|
+
|
27
|
+
##
|
28
|
+
# @return [Float] Value at row 2, column 2 of the matrix.
|
29
|
+
attr_accessor :m22
|
30
|
+
|
31
|
+
##
|
32
|
+
# @return [Float] Value at row 2, column 3 of the matrix.
|
33
|
+
attr_accessor :m23
|
34
|
+
|
35
|
+
##
|
36
|
+
# @return [Float] Value at row 2, column 4 of the matrix.
|
37
|
+
attr_accessor :m24
|
38
|
+
|
39
|
+
##
|
40
|
+
# @return [Float] Value at row 3, column 1 of the matrix.
|
41
|
+
attr_accessor :m31
|
42
|
+
|
43
|
+
##
|
44
|
+
# @return [Float] Value at row 3, column 2 of the matrix.
|
45
|
+
attr_accessor :m32
|
46
|
+
|
47
|
+
##
|
48
|
+
# @return [Float] Value at row 3, column 3 of the matrix.
|
49
|
+
attr_accessor :m33
|
50
|
+
|
51
|
+
##
|
52
|
+
# @return [Float] Value at row 3, column 4 of the matrix.
|
53
|
+
attr_accessor :m34
|
54
|
+
|
55
|
+
##
|
56
|
+
# @return [Float] Value at row 4, column 1 of the matrix.
|
57
|
+
attr_accessor :m41
|
58
|
+
|
59
|
+
##
|
60
|
+
# @return [Float] Value at row 4, column 2 of the matrix.
|
61
|
+
attr_accessor :m42
|
62
|
+
|
63
|
+
##
|
64
|
+
# @return [Float] Value at row 4, column 3 of the matrix.
|
65
|
+
attr_accessor :m43
|
66
|
+
|
67
|
+
##
|
68
|
+
# @return [Float] Value at row 4, column 4 of the matrix.
|
69
|
+
attr_accessor :m44
|
70
|
+
|
71
|
+
##
|
72
|
+
# @return [Vector3] the translation component of this matrix.
|
73
|
+
attr_accessor :translation
|
74
|
+
|
75
|
+
##
|
76
|
+
# @overload initialize
|
77
|
+
# Constructs a default matrix with all values set to `0.0`.
|
78
|
+
#
|
79
|
+
# @overload initialize(matrix)
|
80
|
+
# Constructs a Matrix4x4 from the given {Matrix3x2}.
|
81
|
+
#
|
82
|
+
# @param matrix [Matrix3x3] The source matrix.
|
83
|
+
#
|
84
|
+
# @overload initialize(value)
|
85
|
+
# Constructs a matrix from a single component value.
|
86
|
+
#
|
87
|
+
# @param value [Float] Value to applied to all components.
|
88
|
+
#
|
89
|
+
# @overload initialize(m11, m12, m13, m14, m21, m22, m23, m24, m31, m32, m33, m34, m41, m42, m43, m44)
|
90
|
+
# Constructs a matrix from the given components.
|
91
|
+
#
|
92
|
+
# @param m11 [Float] Value at row 1, column 1 of the matrix.
|
93
|
+
# @param m12 [Float] Value at row 1, column 2 of the matrix.
|
94
|
+
# @param m13 [Float] Value at row 1, column 3 of the matrix.
|
95
|
+
# @param m14 [Float] Value at row 1, column 4 of the matrix.
|
96
|
+
# @param m21 [Float] Value at row 2, column 1 of the matrix.
|
97
|
+
# @param m22 [Float] Value at row 2, column 2 of the matrix.
|
98
|
+
# @param m23 [Float] Value at row 2, column 3 of the matrix.
|
99
|
+
# @param m24 [Float] Value at row 2, column 4 of the matrix.
|
100
|
+
# @param m31 [Float] Value at row 3, column 1 of the matrix.
|
101
|
+
# @param m32 [Float] Value at row 3, column 2 of the matrix.
|
102
|
+
# @param m33 [Float] Value at row 3, column 3 of the matrix.
|
103
|
+
# @param m34 [Float] Value at row 3, column 4 of the matrix.
|
104
|
+
# @param m41 [Float] Value at row 4, column 1 of the matrix.
|
105
|
+
# @param m42 [Float] Value at row 4, column 2 of the matrix.
|
106
|
+
# @param m43 [Float] Value at row 4, column 3 of the matrix.
|
107
|
+
# @param m44 [Float] Value at row 4, column 4 of the matrix.
|
108
|
+
#
|
109
|
+
def initialize(*args)
|
110
|
+
end
|
111
|
+
|
112
|
+
##
|
113
|
+
# The equivalent of `Enumerable#map`, but returns a matrix object instead of
|
114
|
+
# an Array.
|
115
|
+
#
|
116
|
+
# Invokes the given block once for each element of `self`.
|
117
|
+
#
|
118
|
+
# Creates a new matrix containing the values returned by the block.
|
119
|
+
#
|
120
|
+
# @yield [component] Yields a component of the matrix to the block.
|
121
|
+
# @yieldparam component [Float] The yielded component.
|
122
|
+
#
|
123
|
+
# @return [Matrix4x4]
|
124
|
+
#
|
125
|
+
# @see map!
|
126
|
+
def map
|
127
|
+
end
|
128
|
+
|
129
|
+
##
|
130
|
+
# Invokes the given block once for each element of self, replacing the
|
131
|
+
# element with the value returned by the block.
|
132
|
+
#
|
133
|
+
# The values of the matrix are altered without creating a ne object.
|
134
|
+
#
|
135
|
+
# @yield [component] Yields a component of the matrix to the block.
|
136
|
+
# @yieldparam component [Float] The yielded component.
|
137
|
+
#
|
138
|
+
# @return [self]
|
139
|
+
#
|
140
|
+
# @see map
|
141
|
+
def map!
|
142
|
+
end
|
143
|
+
|
144
|
+
alias_method :collect, :map
|
145
|
+
alias_method :collect!, :map!
|
146
|
+
|
147
|
+
##
|
148
|
+
# Raises the matrix to the given power.
|
149
|
+
#
|
150
|
+
# @param exponent [Float] The power to raise the matrix to.
|
151
|
+
#
|
152
|
+
# @return [Matrix4x4] New matrix that is result of the operation.
|
153
|
+
def **(exponent)
|
154
|
+
end
|
155
|
+
|
156
|
+
##
|
157
|
+
# @return [Boolean] `true` if the matrix is the identity matrix, otherwise
|
158
|
+
# `false`.
|
159
|
+
def identity?
|
160
|
+
end
|
161
|
+
|
162
|
+
##
|
163
|
+
# Calculates the determinant for this matrix.
|
164
|
+
#
|
165
|
+
# The determinant is calculated by expanding the matrix with a third column
|
166
|
+
# whose values are (0,0,1).
|
167
|
+
#
|
168
|
+
# @return [Float] the determinant.
|
169
|
+
def determinant
|
170
|
+
end
|
171
|
+
|
172
|
+
##
|
173
|
+
# Returns the specified matrix row as an array.
|
174
|
+
#
|
175
|
+
# @param index [Integer] The row index to retrieve.
|
176
|
+
#
|
177
|
+
# @return [Array<Float>, nil] the requested row, or `nil` if index is out of
|
178
|
+
# range.
|
179
|
+
#
|
180
|
+
# @see column
|
181
|
+
def row(index)
|
182
|
+
end
|
183
|
+
|
184
|
+
##
|
185
|
+
# Returns the specified matrix column as an array.
|
186
|
+
#
|
187
|
+
# @param index [Integer] The column index to retrieve.
|
188
|
+
#
|
189
|
+
# @return [Array<Float>, nil] the requested column, or `nil` if index is out
|
190
|
+
# of range.
|
191
|
+
#
|
192
|
+
# @see row
|
193
|
+
def column(index)
|
194
|
+
end
|
195
|
+
|
196
|
+
##
|
197
|
+
# Enumerates the rows of the matrix.
|
198
|
+
#
|
199
|
+
# @yield [row] Yields a row to the block.
|
200
|
+
# @yieldparam row [Array<Float>] The current row as an array.
|
201
|
+
#
|
202
|
+
# @return [self]
|
203
|
+
#
|
204
|
+
# see each_column
|
205
|
+
def each_row
|
206
|
+
end
|
207
|
+
|
208
|
+
##
|
209
|
+
# Enumerates the columns of the matrix.
|
210
|
+
#
|
211
|
+
# @yield [column] Yields a column to the block.
|
212
|
+
# @yieldparam column [Array<Float>] The current column as an array.
|
213
|
+
#
|
214
|
+
# @return [self]
|
215
|
+
#
|
216
|
+
# @see each_row
|
217
|
+
def each_column
|
218
|
+
end
|
219
|
+
|
220
|
+
##
|
221
|
+
# Linearly interpolates from this matrix to another, based on the amount.
|
222
|
+
#
|
223
|
+
# @param matrix [Matrix4x4] The source matrix to interpolate between.
|
224
|
+
# @param amount [Float] The relative weighting of the given matrix, clamped
|
225
|
+
# between `0.0` and `1.0`.
|
226
|
+
#
|
227
|
+
# @return [Matrix4x4] a newly created interpolated matrix.
|
228
|
+
#
|
229
|
+
# @see lerp!
|
230
|
+
def lerp(matrix, amount)
|
231
|
+
end
|
232
|
+
|
233
|
+
##
|
234
|
+
# @note This method is the same as {#lerp}, but alters the values of this
|
235
|
+
# matrix instead of creating a new instance.
|
236
|
+
#
|
237
|
+
# Linearly interpolates from this matrix to another, based on the amount.
|
238
|
+
#
|
239
|
+
# @param matrix [Matrix4x4] The source matrix to interpolate between.
|
240
|
+
# @param amount [Float] The relative weighting of the given matrix, clamped
|
241
|
+
# between `0.0` and `1.0`.
|
242
|
+
#
|
243
|
+
# @return [self]
|
244
|
+
#
|
245
|
+
# @see lerp
|
246
|
+
def lerp!(matrix, amount)
|
247
|
+
end
|
248
|
+
|
249
|
+
##
|
250
|
+
# @return [String] a String representation of this instance.
|
251
|
+
def to_s
|
252
|
+
end
|
253
|
+
|
254
|
+
##
|
255
|
+
# @return [Array<Array<Float>>] an Array representation of this instance.
|
256
|
+
def to_a
|
257
|
+
end
|
258
|
+
|
259
|
+
alias_method :elements, :to_a
|
260
|
+
|
261
|
+
##
|
262
|
+
# @return [Hash{Symbol => Float}] a Hash representation of this instance.
|
263
|
+
def to_h
|
264
|
+
end
|
265
|
+
|
266
|
+
##
|
267
|
+
# Negates the given matrix by multiplying all values by `-1.0`.
|
268
|
+
#
|
269
|
+
# @return [Matrix4x4] the negated matrix.
|
270
|
+
def -@
|
271
|
+
end
|
272
|
+
|
273
|
+
##
|
274
|
+
# Adds each matrix element in value1 with its corresponding element in the
|
275
|
+
# specified matrix.
|
276
|
+
#
|
277
|
+
# @param other [Matrix4x4] The matrix to add.
|
278
|
+
#
|
279
|
+
# @return [Matrix4x4] A matrix containing the summed values.
|
280
|
+
def +(other)
|
281
|
+
end
|
282
|
+
|
283
|
+
##
|
284
|
+
# Subtracts each matrix element in the specified matrix from its
|
285
|
+
# corresponding element in this matrix to form a new matrix of the
|
286
|
+
# difference.
|
287
|
+
#
|
288
|
+
# @param other [Matrix4x4] The matrix to subtract.
|
289
|
+
#
|
290
|
+
# @return [Matrix4x4] The matrix containing the resulting values.
|
291
|
+
def -(other)
|
292
|
+
end
|
293
|
+
|
294
|
+
##
|
295
|
+
# Multiplies this matrix by the specified value.
|
296
|
+
#
|
297
|
+
# @overload *(scalar)
|
298
|
+
# Scales all elements in a matrix by the given scalar factor.
|
299
|
+
#
|
300
|
+
# @param scalar [Float] The scaling value to use.
|
301
|
+
#
|
302
|
+
# @overload *(other)
|
303
|
+
# Multiplies two matrices together and returns the resulting matrix.
|
304
|
+
#
|
305
|
+
# @param other [Matrix4x4] The source matrix to multiply.
|
306
|
+
#
|
307
|
+
# @return [Matrix4x4] the product matrix.
|
308
|
+
def *(other)
|
309
|
+
end
|
310
|
+
|
311
|
+
##
|
312
|
+
# Returns flag if this matrix instance is equal to the given object.
|
313
|
+
#
|
314
|
+
# @param other [Object] The object to compare.
|
315
|
+
#
|
316
|
+
# @return [Boolean] `true` if objects are equal, otherwise `false`.
|
317
|
+
def ==(other)
|
318
|
+
end
|
319
|
+
|
320
|
+
##
|
321
|
+
# Accesses the matrix component using the zero-based row/column indices.
|
322
|
+
#
|
323
|
+
# @param row [Integer] The zero-based row index.
|
324
|
+
# @param column [Integer] The zero-based column index.
|
325
|
+
#
|
326
|
+
# @return [Float, nil] the value at the specified location, or `nil` if an
|
327
|
+
# index is out of range.
|
328
|
+
def [](row, column)
|
329
|
+
end
|
330
|
+
|
331
|
+
##
|
332
|
+
# Sets the matrix component using the zero-based row/column indices.
|
333
|
+
#
|
334
|
+
# @param row [Integer] The zero-based row index.
|
335
|
+
# @param column [Integer] The zero-based column index.
|
336
|
+
# @param value [Float] The value to set.
|
337
|
+
#
|
338
|
+
# @return [Float] the value.
|
339
|
+
def []=(row, column, value)
|
340
|
+
end
|
341
|
+
|
342
|
+
##
|
343
|
+
# Attempts to invert the given matrix.
|
344
|
+
#
|
345
|
+
# @note Some matrices cannot be inverted, in which case the returned matrix
|
346
|
+
# will have all values set to `NaN`.
|
347
|
+
#
|
348
|
+
# @return [Matrix4x4] A new matrix that is this matrix inverted.
|
349
|
+
def invert
|
350
|
+
end
|
351
|
+
|
352
|
+
##
|
353
|
+
# Creates a matrix by transforming this instance by applying the given
|
354
|
+
# quaternion rotation.
|
355
|
+
#
|
356
|
+
# @param rotation [Quaternion] The rotation to apply.
|
357
|
+
#
|
358
|
+
# @return [Matrix4x4] a transformed matrix.
|
359
|
+
def transform(rotation)
|
360
|
+
end
|
361
|
+
|
362
|
+
##
|
363
|
+
# Transforms this matrix by applying the given quaternion rotation.
|
364
|
+
#
|
365
|
+
# @param rotation [Quaternion] The rotation to apply.
|
366
|
+
#
|
367
|
+
# @return [self]
|
368
|
+
def transform!(rotation)
|
369
|
+
end
|
370
|
+
|
371
|
+
##
|
372
|
+
# Transposes the rows and columns of a matrix.
|
373
|
+
#
|
374
|
+
# @return [Matrix4x4] a transposed matrix.
|
375
|
+
def transpose
|
376
|
+
end
|
377
|
+
|
378
|
+
class << self
|
379
|
+
|
380
|
+
##
|
381
|
+
# @return [Matrix4x4] the multiplicative identity matrix.
|
382
|
+
def identity
|
383
|
+
end
|
384
|
+
|
385
|
+
##
|
386
|
+
# Creates a spherical billboard that rotates around a specified object
|
387
|
+
# position.
|
388
|
+
#
|
389
|
+
# @param position [Vector3] Position of the object the billboard will
|
390
|
+
# rotate around.
|
391
|
+
# @param camera [Vector3] Position of the camera.
|
392
|
+
# @param up [Vector3] The up vector of the camera.
|
393
|
+
# @param forward [Vector3] The forward vector of the camera.
|
394
|
+
#
|
395
|
+
# @return [Matrix4x4] the created billboard matrix.
|
396
|
+
def create_billboard(position, camera, up, forward)
|
397
|
+
end
|
398
|
+
|
399
|
+
##
|
400
|
+
# Creates a cylindrical billboard that rotates around a specified axis.
|
401
|
+
#
|
402
|
+
# @param position [Vector3] Position of the object the billboard will
|
403
|
+
# rotate around.
|
404
|
+
# @param camera [Vector3] Position of the camera.
|
405
|
+
# @param axis [Vector3] Axis to rotate the billboard around.
|
406
|
+
# @param cam_forward [Vector3] Forward vector of the camera.
|
407
|
+
# @param obj_forward [Vector3] Forward vector of the object.
|
408
|
+
#
|
409
|
+
# @return [Matrix4x4] the created billboard matrix.
|
410
|
+
def create_constrained_billboard(position, camera, axis, cam_forward, obj_forward)
|
411
|
+
end
|
412
|
+
|
413
|
+
##
|
414
|
+
# Creates a translation matrix.
|
415
|
+
#
|
416
|
+
# @overload create_translation(position)
|
417
|
+
# @param position [Vector3] The amount to translate in each axis.
|
418
|
+
#
|
419
|
+
# @overload create_translation(x, y, z)
|
420
|
+
# @param x [Float] The amount to translate on the X-axis.
|
421
|
+
# @param y [Float] The amount to translate on the Y-axis.
|
422
|
+
# @param z [Float] The amount to translate on the Z-axis.
|
423
|
+
#
|
424
|
+
# @return [Matrix4x4] the translation matrix.
|
425
|
+
def create_translation
|
426
|
+
end
|
427
|
+
|
428
|
+
##
|
429
|
+
# Creates a scaling matrix.
|
430
|
+
#
|
431
|
+
# @overload create_scale(x, y, z)
|
432
|
+
# @param x [Float] Value to scale by on the X-axis.
|
433
|
+
# @param y [Float] Value to scale by on the Y-axis.
|
434
|
+
# @param z [Float] Value to scale by on the Z-axis.
|
435
|
+
#
|
436
|
+
# @overload create_scale(x, y, z, center)
|
437
|
+
# @param x [Float] Value to scale by on the X-axis.
|
438
|
+
# @param y [Float] Value to scale by on the Y-axis.
|
439
|
+
# @param z [Float] Value to scale by on the Z-axis.
|
440
|
+
# @param center [Vector3] The center point.
|
441
|
+
#
|
442
|
+
# @overload create_scale(scales)
|
443
|
+
# @param scales [Vector3] The vector containing the amount to scale by
|
444
|
+
# on each axis.
|
445
|
+
#
|
446
|
+
# @overload create_scale(scales, center)
|
447
|
+
# @param scales [Vector3] The vector containing the amount to scale by
|
448
|
+
# on each axis.
|
449
|
+
# @param center [Vector3] The center point.
|
450
|
+
#
|
451
|
+
# @overload create_scale(scale)
|
452
|
+
# @param scale [Float] The uniform scaling factor.
|
453
|
+
#
|
454
|
+
# @overload create_scale(scale, center)
|
455
|
+
# @param scale [Float] The uniform scaling factor.
|
456
|
+
# @param center [Vector3] The center point.
|
457
|
+
#
|
458
|
+
# @return [Matrix4x4] the scaling matrix.
|
459
|
+
def create_scale
|
460
|
+
end
|
461
|
+
|
462
|
+
##
|
463
|
+
# Creates a matrix for rotating points around the X-axis.
|
464
|
+
#
|
465
|
+
# @overload create_rotation_x(radians)
|
466
|
+
# @param radians [Float] The amount, in radians, by which to rotate
|
467
|
+
# around the X-axis.
|
468
|
+
#
|
469
|
+
# @overload create_rotation_x(radians, center)
|
470
|
+
# @param radians [Float] The amount, in radians, by which to rotate
|
471
|
+
# around the X-axis.
|
472
|
+
# @param center [Vector3] The center point.
|
473
|
+
#
|
474
|
+
# @return [Matrix4x4] the rotation matrix.
|
475
|
+
def create_rotation_x
|
476
|
+
end
|
477
|
+
|
478
|
+
##
|
479
|
+
# Creates a matrix for rotating points around the Y-axis.
|
480
|
+
#
|
481
|
+
# @overload create_rotation_y(radians)
|
482
|
+
# @param radians [Float] The amount, in radians, by which to rotate
|
483
|
+
# around the Y-axis.
|
484
|
+
#
|
485
|
+
# @overload create_rotation_y(radians, center)
|
486
|
+
# @param radians [Float] The amount, in radians, by which to rotate
|
487
|
+
# around the Y-axis.
|
488
|
+
# @param center [Vector3] The center point.
|
489
|
+
#
|
490
|
+
# @return [Matrix4x4] the rotation matrix.
|
491
|
+
def create_rotation_y
|
492
|
+
end
|
493
|
+
|
494
|
+
##
|
495
|
+
# Creates a matrix for rotating points around the Z-axis.
|
496
|
+
#
|
497
|
+
# @overload create_rotation_z(radians)
|
498
|
+
# @param radians [Float] The amount, in radians, by which to rotate
|
499
|
+
# around the Z-axis.
|
500
|
+
#
|
501
|
+
# @overload create_rotation_z(radians, center)
|
502
|
+
# @param radians [Float] The amount, in radians, by which to rotate
|
503
|
+
# around the Z-axis.
|
504
|
+
# @param center [Vector3] The center point.
|
505
|
+
#
|
506
|
+
# @return [Matrix4x4] the rotation matrix.
|
507
|
+
def create_rotation_z
|
508
|
+
end
|
509
|
+
|
510
|
+
##
|
511
|
+
# Creates a perspective projection matrix based on a field of view, aspect
|
512
|
+
# ratio, and near and far view plane distances.
|
513
|
+
#
|
514
|
+
# @param fov [Float] Field of view in the y direction, in radians.
|
515
|
+
# @param ratio [Float] Aspect ratio, defined as view space width divided
|
516
|
+
# by height.
|
517
|
+
# @param near [Float] Distance to the near view plane.
|
518
|
+
# @param far [Float] Distance to the far view plane.
|
519
|
+
#
|
520
|
+
# @return [Vector3] the perspective projection matrix.
|
521
|
+
def create_perspective_fov(fov, ratio, near, far)
|
522
|
+
end
|
523
|
+
|
524
|
+
##
|
525
|
+
# Creates a perspective projection matrix from the given view volume
|
526
|
+
# dimensions.
|
527
|
+
#
|
528
|
+
# @param width [Float] Width of the view volume at the near view plane.
|
529
|
+
# @param height [Float] Height of the view volume at the near view plane.
|
530
|
+
# @param near [Float] Distance to the near view plane.
|
531
|
+
# @param far [Float] Distance to the far view plane.
|
532
|
+
#
|
533
|
+
# @return [Vector3] the perspective projection matrix.
|
534
|
+
def create_perspective(width, height, near, far)
|
535
|
+
end
|
536
|
+
|
537
|
+
##
|
538
|
+
# Creates a customized, perspective projection matrix.
|
539
|
+
#
|
540
|
+
# @param left [Float] Minimum x-value of the view volume at the near view
|
541
|
+
# plane.
|
542
|
+
# @param right [Float] Maximum x-value of the view volume at the near view
|
543
|
+
# plane.
|
544
|
+
# @param bottom [Float] Minimum y-value of the view volume at the near
|
545
|
+
# view plane.
|
546
|
+
# @param top [Float] Maximum y-value of the view volume at the near view
|
547
|
+
# plane.
|
548
|
+
# @param near [Float] Distance to the near view plane.
|
549
|
+
# @param far [Float] Distance to the far view plane.
|
550
|
+
#
|
551
|
+
# @return [Vector3] the perspective projection matrix.
|
552
|
+
def create_perspective_off_center(left, right, bottom, top, near, far)
|
553
|
+
end
|
554
|
+
|
555
|
+
##
|
556
|
+
# Creates an orthographic perspective matrix from the given view volume
|
557
|
+
# dimensions.
|
558
|
+
#
|
559
|
+
# @param width [Float] Width of the view volume.
|
560
|
+
# @param height [Float] Height of the view volume.
|
561
|
+
# @param near [Float] Minimum Z-value of the view volume.
|
562
|
+
# @param far [Float] Maximum Z-value of the view volume.
|
563
|
+
#
|
564
|
+
# @return [Matrix4x4] the orthographic projection matrix.
|
565
|
+
def create_orthographic(width, height, near, far)
|
566
|
+
end
|
567
|
+
|
568
|
+
##
|
569
|
+
# Builds a customized, orthographic projection matrix.
|
570
|
+
#
|
571
|
+
# @param left [Float] Minimum X-value of the view volume.
|
572
|
+
# @param right [Float] Maximum X-value of the view volume.
|
573
|
+
# @param bottom [Float] Minimum Y-value of the view volume.
|
574
|
+
# @param top [Float] Maximum Y-value of the view volume.
|
575
|
+
# @param near [Float] Minimum Z-value of the view volume.
|
576
|
+
# @param far [Float] Maximum Z-value of the view volume.
|
577
|
+
#
|
578
|
+
# @return [Matrix4x4] the orthographic projection matrix.
|
579
|
+
def create_orthographic_off_center(left, right, bottom, top, near, far)
|
580
|
+
end
|
581
|
+
|
582
|
+
##
|
583
|
+
# Creates a view matrix.
|
584
|
+
#
|
585
|
+
# @param camera [Vector3] The position of the camera.
|
586
|
+
# @param target [Vector3] The target towards which the camera is pointing.
|
587
|
+
# @param up [Vector3] The direction that is "up" from the camera's point
|
588
|
+
# of view.
|
589
|
+
#
|
590
|
+
# @return [Matrix4x4] The view matrix.
|
591
|
+
def create_look_at(camera, target, up)
|
592
|
+
end
|
593
|
+
|
594
|
+
##
|
595
|
+
# Creates a world matrix with the specified parameters.
|
596
|
+
#
|
597
|
+
# @param position [Vector3] The position of the object; used in
|
598
|
+
# translation operations.
|
599
|
+
# @param forward [Vector3] Forward direction of the object.
|
600
|
+
# @param up [Vector3] Upward direction of the object; usually
|
601
|
+
# `<0.0, 1.0, 0.0>`.
|
602
|
+
#
|
603
|
+
# @return [Matrix4x4] the world matrix.
|
604
|
+
def create_world(position, forward, up)
|
605
|
+
end
|
606
|
+
|
607
|
+
##
|
608
|
+
# Creates a Matrix that flattens geometry into a specified Plane as if
|
609
|
+
# casting a shadow from a specified light source.
|
610
|
+
#
|
611
|
+
# @param direction [Vector3] The direction from which the light that will
|
612
|
+
# cast the shadow is coming.
|
613
|
+
# @param plane [Plane] he Plane onto which the new matrix should flatten
|
614
|
+
# geometry so as to cast a shadow.
|
615
|
+
#
|
616
|
+
# @return [Matrix4x4] A new Matrix that can be used to flatten geometry
|
617
|
+
# onto the specified plane from the specified direction.
|
618
|
+
def create_shadow(direction, plane)
|
619
|
+
end
|
620
|
+
|
621
|
+
##
|
622
|
+
# Creates a Matrix that reflects the coordinate system about a specified
|
623
|
+
# plane.
|
624
|
+
#
|
625
|
+
# @param plane [Plane] The plane about which to create a reflection.
|
626
|
+
#
|
627
|
+
# @return [Matrix4x4] a new matrix expressing the reflection.
|
628
|
+
def create_reflection(plane)
|
629
|
+
end
|
630
|
+
|
631
|
+
##
|
632
|
+
# Creates a matrix that rotates around an arbitrary vector.
|
633
|
+
#
|
634
|
+
# @param axis [Vector3] The axis to rotate around.
|
635
|
+
# @param angle [Float] The angle to rotate around the given axis, in
|
636
|
+
# radians.
|
637
|
+
#
|
638
|
+
# @return [Matrix4x4] the rotation matrix.
|
639
|
+
def from_axis_angle(axis, angle)
|
640
|
+
end
|
641
|
+
|
642
|
+
##
|
643
|
+
# Creates a rotation matrix from the given quaternion rotation value.
|
644
|
+
#
|
645
|
+
# @param quaternion [Quaternion] The source quaternion.
|
646
|
+
#
|
647
|
+
# @return [Matrix4x4] the rotation matrix.
|
648
|
+
def from_quaternion(quaternion)
|
649
|
+
end
|
650
|
+
|
651
|
+
##
|
652
|
+
# Creates a rotation matrix from the specified yaw, pitch, and roll.
|
653
|
+
#
|
654
|
+
# @param yaw [Float] Angle of rotation, in radians, around the Y-axis.
|
655
|
+
# @param pitch [Float] Angle of rotation, in radians, around the X-axis.
|
656
|
+
# @param roll [Float] Angle of rotation, in radians, around the Z-axis.
|
657
|
+
#
|
658
|
+
# @return [Matrix4x4] the rotation matrix.
|
659
|
+
def from_yaw_pitch_roll(yaw, pitch, roll)
|
660
|
+
end
|
661
|
+
|
662
|
+
##
|
663
|
+
# Linearly interpolates from _matrix1_ to _matrix2_, based on the third
|
664
|
+
# parameter.
|
665
|
+
#
|
666
|
+
# @param matrix1 [Matrix4x4] The first source matrix.
|
667
|
+
# @param matrix2 [Matrix4x4] The second source matrix.
|
668
|
+
# @param amount [Float] The relative weighting of _matrix2_, clamped
|
669
|
+
# between `0.0` and `1.0`.
|
670
|
+
#
|
671
|
+
# @return [Matrix4x4] the interpolated matrix.
|
672
|
+
def lerp(matrix1, matrix2, amount)
|
673
|
+
end
|
674
|
+
end
|
675
|
+
end
|
676
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module Numerix
|
2
|
+
|
3
|
+
##
|
4
|
+
# @abstract Abstract base class for matrix classes.
|
5
|
+
#
|
6
|
+
# This class cannot be instantiated, it of only for providing a common base
|
7
|
+
# class for matrix types.
|
8
|
+
class MatrixBase < Structure
|
9
|
+
|
10
|
+
private_class_method :new
|
11
|
+
|
12
|
+
include Enumerable
|
13
|
+
end
|
14
|
+
end
|