snow-math 1.3.1 → 1.4.2
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 +4 -4
- data/README.md +49 -0
- data/ext/snow-math/maths_local.h +39 -0
- data/ext/snow-math/snow-math.c +1175 -187
- data/ext/snow-math/vec2.c +134 -0
- data/lib/snow-math.rb +2 -1
- data/lib/snow-math/inspect.rb +7 -1
- data/lib/snow-math/marshal.rb +6 -0
- data/lib/snow-math/mat3.rb +4 -0
- data/lib/snow-math/mat4.rb +5 -1
- data/lib/snow-math/ptr.rb +11 -1
- data/lib/snow-math/quat.rb +24 -0
- data/lib/snow-math/swizzle.rb +14 -7
- data/lib/snow-math/to_a.rb +29 -1
- data/lib/snow-math/vec2.rb +168 -0
- data/lib/snow-math/vec3.rb +17 -1
- data/lib/snow-math/vec4.rb +17 -1
- metadata +4 -2
@@ -0,0 +1,134 @@
|
|
1
|
+
/*
|
2
|
+
2D vector maths
|
3
|
+
Written by Noel Cower
|
4
|
+
|
5
|
+
See COPYING for license information
|
6
|
+
*/
|
7
|
+
|
8
|
+
#define __SNOW__VEC2_C__
|
9
|
+
|
10
|
+
#include "maths_local.h"
|
11
|
+
|
12
|
+
#if defined(__cplusplus)
|
13
|
+
extern "C"
|
14
|
+
{
|
15
|
+
#endif /* __cplusplus */
|
16
|
+
|
17
|
+
const vec2_t g_vec2_zero = {s_float_lit(0.0), s_float_lit(0.0)};
|
18
|
+
const vec2_t g_vec2_one = {s_float_lit(1.0), s_float_lit(1.0)};
|
19
|
+
|
20
|
+
void vec2_copy(const vec2_t in, vec2_t out)
|
21
|
+
{
|
22
|
+
out[1] = in[1];
|
23
|
+
out[0] = in[0];
|
24
|
+
}
|
25
|
+
|
26
|
+
void vec2_set(s_float_t x, s_float_t y, vec2_t v)
|
27
|
+
{
|
28
|
+
v[0] = x;
|
29
|
+
v[1] = y;
|
30
|
+
}
|
31
|
+
|
32
|
+
/*!
|
33
|
+
* Gets the squared length of a vector. Useful for approximations and when
|
34
|
+
* you don't need the actual magnitude.
|
35
|
+
*/
|
36
|
+
s_float_t vec2_length_squared(const vec2_t v)
|
37
|
+
{
|
38
|
+
return (v[0] * v[0]) + (v[1] * v[1]);
|
39
|
+
}
|
40
|
+
|
41
|
+
/*!
|
42
|
+
* Gets the length/magnitude of a vector.
|
43
|
+
*/
|
44
|
+
s_float_t vec2_length(const vec2_t v)
|
45
|
+
{
|
46
|
+
return s_sqrt((v[0] * v[0]) + (v[1] * v[1]));
|
47
|
+
}
|
48
|
+
|
49
|
+
void vec2_normalize(const vec2_t in, vec2_t out)
|
50
|
+
{
|
51
|
+
s_float_t mag = vec2_length(in);
|
52
|
+
if (mag) mag = s_float_lit(1.0) / mag;
|
53
|
+
out[1] = in[1] * mag;
|
54
|
+
out[0] = in[0] * mag;
|
55
|
+
}
|
56
|
+
|
57
|
+
void vec2_subtract(const vec2_t left, const vec2_t right, vec2_t out)
|
58
|
+
{
|
59
|
+
out[1] = left[1] - right[1];
|
60
|
+
out[0] = left[0] - right[0];
|
61
|
+
}
|
62
|
+
|
63
|
+
void vec2_add(const vec2_t left, const vec2_t right, vec2_t out)
|
64
|
+
{
|
65
|
+
out[1] = left[1] + right[1];
|
66
|
+
out[0] = left[0] + right[0];
|
67
|
+
}
|
68
|
+
|
69
|
+
void vec2_multiply(const vec2_t left, const vec2_t right, vec2_t out)
|
70
|
+
{
|
71
|
+
out[1] = left[1] * right[1];
|
72
|
+
out[0] = left[0] * right[0];
|
73
|
+
}
|
74
|
+
|
75
|
+
void vec2_negate(const vec2_t v, vec2_t out)
|
76
|
+
{
|
77
|
+
out[1] = -v[1];
|
78
|
+
out[0] = -v[0];
|
79
|
+
}
|
80
|
+
|
81
|
+
void vec2_inverse(const vec2_t v, vec2_t out)
|
82
|
+
{
|
83
|
+
out[1] = (!float_is_zero(v[1])) ? (s_float_lit(1.0) / v[1]) : v[1];
|
84
|
+
out[0] = (!float_is_zero(v[0])) ? (s_float_lit(1.0) / v[0]) : v[0];
|
85
|
+
}
|
86
|
+
|
87
|
+
void vec2_project(const vec2_t in, const vec2_t normal, vec2_t out)
|
88
|
+
{
|
89
|
+
vec2_scale(normal, vec2_dot_product(in, normal), out);
|
90
|
+
}
|
91
|
+
|
92
|
+
void vec2_reflect(const vec2_t in, const vec2_t normal, vec2_t out)
|
93
|
+
{
|
94
|
+
vec2_t temp;
|
95
|
+
vec2_scale(normal, s_float_lit(2.0) * vec2_dot_product(in, normal), temp);
|
96
|
+
vec2_subtract(in, temp, out);
|
97
|
+
}
|
98
|
+
|
99
|
+
s_float_t vec2_dot_product(const vec2_t left, const vec2_t right)
|
100
|
+
{
|
101
|
+
return ((left[0] * right[0]) + (left[1] * right[1]));
|
102
|
+
}
|
103
|
+
|
104
|
+
void vec2_scale(const vec2_t v, s_float_t scalar, vec2_t out)
|
105
|
+
{
|
106
|
+
out[1] = v[1] * scalar;
|
107
|
+
out[0] = v[0] * scalar;
|
108
|
+
}
|
109
|
+
|
110
|
+
/*!
|
111
|
+
* Divides the given vector by the divisor.
|
112
|
+
* \returns Zero if successful, otherwise nonzero if the result is undefined.
|
113
|
+
*/
|
114
|
+
int vec2_divide(const vec2_t v, s_float_t divisor, vec2_t out)
|
115
|
+
{
|
116
|
+
if (divisor) {
|
117
|
+
divisor = s_float_lit(1.0) / divisor;
|
118
|
+
out[1] = v[1] * divisor;
|
119
|
+
out[0] = v[0] * divisor;
|
120
|
+
return 1;
|
121
|
+
}
|
122
|
+
return 0;
|
123
|
+
}
|
124
|
+
|
125
|
+
int vec2_equals(const vec2_t left, const vec2_t right)
|
126
|
+
{
|
127
|
+
return float_equals(left[0], right[0]) &&
|
128
|
+
float_equals(left[1], right[1]);
|
129
|
+
}
|
130
|
+
|
131
|
+
#if defined(__cplusplus)
|
132
|
+
}
|
133
|
+
#endif /* __cplusplus */
|
134
|
+
|
data/lib/snow-math.rb
CHANGED
@@ -3,6 +3,7 @@
|
|
3
3
|
# See COPYING for license details.
|
4
4
|
|
5
5
|
require 'snow-math/bindings'
|
6
|
+
require 'snow-math/vec2'
|
6
7
|
require 'snow-math/vec3'
|
7
8
|
require 'snow-math/vec4'
|
8
9
|
require 'snow-math/mat3'
|
@@ -21,6 +22,6 @@ module Snow
|
|
21
22
|
#
|
22
23
|
# snow-math bindings version string.
|
23
24
|
#
|
24
|
-
SNOW_MATH_VERSION = '1.
|
25
|
+
SNOW_MATH_VERSION = '1.4.2'
|
25
26
|
|
26
27
|
end
|
data/lib/snow-math/inspect.rb
CHANGED
@@ -2,7 +2,8 @@
|
|
2
2
|
# Copyright (c) 2013 Noel Raymond Cower. All rights reserved.
|
3
3
|
# See COPYING for license details.
|
4
4
|
|
5
|
-
require 'snow-math'
|
5
|
+
require 'snow-math/bindings'
|
6
|
+
require 'snow-math/to_a'
|
6
7
|
|
7
8
|
module Snow
|
8
9
|
|
@@ -34,12 +35,17 @@ module Snow
|
|
34
35
|
|
35
36
|
end
|
36
37
|
|
38
|
+
class Vec2 ; include ::Snow::InspectSupport ; end
|
37
39
|
class Vec3 ; include ::Snow::InspectSupport ; end
|
38
40
|
class Vec4 ; include ::Snow::InspectSupport ; end
|
39
41
|
class Quat ; include ::Snow::InspectSupport ; end
|
40
42
|
class Mat3 ; include ::Snow::InspectSupport ; end
|
41
43
|
class Mat4 ; include ::Snow::InspectSupport ; end
|
42
44
|
|
45
|
+
if const_defined?(:Vec2Array)
|
46
|
+
class Vec2Array ; include ::Snow::InspectSupport ; end
|
47
|
+
end
|
48
|
+
|
43
49
|
if const_defined?(:Vec3Array)
|
44
50
|
class Vec3Array ; include ::Snow::InspectSupport ; end
|
45
51
|
end
|
data/lib/snow-math/marshal.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'snow-math/bindings'
|
2
|
+
require 'snow-math/to_a'
|
2
3
|
|
3
4
|
module Snow ; end
|
4
5
|
|
@@ -46,12 +47,17 @@ module Snow::ArrayMarshalSupport # :nodoc: all
|
|
46
47
|
end
|
47
48
|
|
48
49
|
module Snow
|
50
|
+
class Vec2 ; include ::Snow::BaseMarshalSupport ; end
|
49
51
|
class Vec3 ; include ::Snow::BaseMarshalSupport ; end
|
50
52
|
class Vec4 ; include ::Snow::BaseMarshalSupport ; end
|
51
53
|
class Quat ; include ::Snow::BaseMarshalSupport ; end
|
52
54
|
class Mat3 ; include ::Snow::BaseMarshalSupport ; end
|
53
55
|
class Mat4 ; include ::Snow::BaseMarshalSupport ; end
|
54
56
|
|
57
|
+
if const_defined?(:Vec2Array)
|
58
|
+
class Vec2Array ; include ::Snow::ArrayMarshalSupport ; end
|
59
|
+
end
|
60
|
+
|
55
61
|
if const_defined?(:Vec3Array)
|
56
62
|
class Vec3Array ; include ::Snow::ArrayMarshalSupport ; end
|
57
63
|
end
|
data/lib/snow-math/mat3.rb
CHANGED
data/lib/snow-math/mat4.rb
CHANGED
@@ -37,6 +37,10 @@ class Snow::Mat4
|
|
37
37
|
alias_method :clone, :copy
|
38
38
|
|
39
39
|
|
40
|
+
def to_quat
|
41
|
+
Quat.new(self)
|
42
|
+
end
|
43
|
+
|
40
44
|
# Calls #transpose(self)
|
41
45
|
#
|
42
46
|
# call-seq: transpose! -> self
|
@@ -136,7 +140,7 @@ class Snow::Mat4
|
|
136
140
|
# call-seq: translate!(vec3) -> self
|
137
141
|
# call-seq: translate!(x, y, z) -> self
|
138
142
|
def translate!(*args)
|
139
|
-
translate
|
143
|
+
translate(*args, self)
|
140
144
|
end
|
141
145
|
|
142
146
|
# Calls #inverse_affine(self)
|
data/lib/snow-math/ptr.rb
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
# Copyright (c) 2013 Noel Raymond Cower. All rights reserved.
|
3
3
|
# See COPYING for license details.
|
4
4
|
|
5
|
-
require 'snow-math'
|
5
|
+
require 'snow-math/bindings'
|
6
6
|
require 'fiddle'
|
7
7
|
|
8
8
|
module Snow
|
@@ -27,6 +27,10 @@ module Snow
|
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
30
|
+
class Vec2
|
31
|
+
include ::Snow::FiddlePointerSupport
|
32
|
+
end
|
33
|
+
|
30
34
|
class Vec3
|
31
35
|
include ::Snow::FiddlePointerSupport
|
32
36
|
end
|
@@ -47,6 +51,12 @@ module Snow
|
|
47
51
|
include ::Snow::FiddlePointerSupport
|
48
52
|
end
|
49
53
|
|
54
|
+
if const_defined?(:Vec2Array)
|
55
|
+
class Vec2Array
|
56
|
+
include ::Snow::FiddlePointerSupport
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
50
60
|
if const_defined?(:Vec3Array)
|
51
61
|
class Vec3Array
|
52
62
|
include ::Snow::FiddlePointerSupport
|
data/lib/snow-math/quat.rb
CHANGED
@@ -33,6 +33,30 @@ class Snow::Quat
|
|
33
33
|
alias_method :clone, :copy
|
34
34
|
|
35
35
|
|
36
|
+
def to_vec2
|
37
|
+
Vec2.new(self)
|
38
|
+
end
|
39
|
+
|
40
|
+
def to_vec3
|
41
|
+
Vec3.new(self)
|
42
|
+
end
|
43
|
+
|
44
|
+
def to_vec4
|
45
|
+
Vec4.new(self)
|
46
|
+
end
|
47
|
+
|
48
|
+
def to_quat
|
49
|
+
Quat.new(self)
|
50
|
+
end
|
51
|
+
|
52
|
+
def to_mat3
|
53
|
+
Mat3.new(self)
|
54
|
+
end
|
55
|
+
|
56
|
+
def to_mat4
|
57
|
+
Mat4.new(self)
|
58
|
+
end
|
59
|
+
|
36
60
|
# Returns the X component of the quaternion.
|
37
61
|
#
|
38
62
|
# call-seq: x -> float
|
data/lib/snow-math/swizzle.rb
CHANGED
@@ -2,7 +2,8 @@
|
|
2
2
|
# Copyright (c) 2013 Noel Raymond Cower. All rights reserved.
|
3
3
|
# See COPYING for license details.
|
4
4
|
|
5
|
-
require 'snow-math'
|
5
|
+
require 'snow-math/bindings'
|
6
|
+
require 'snow-math/to_a'
|
6
7
|
|
7
8
|
module Snow ; end
|
8
9
|
|
@@ -80,20 +81,26 @@ module Snow
|
|
80
81
|
|
81
82
|
end
|
82
83
|
|
84
|
+
class Snow::Vec2
|
85
|
+
@@SWIZZLE_CHARS = /^[xy]{2,4}$/
|
86
|
+
@@SWIZZLE_MAPPING = { 2 => self, 3 => ::Snow::Vec3, 4 => ::Snow::Vec4, 'x' => 0, 'y' => 1 }
|
87
|
+
include ::Snow::SwizzleSupport
|
88
|
+
end
|
89
|
+
|
83
90
|
class Snow::Vec3
|
84
|
-
@@SWIZZLE_CHARS = /^[xyz]{
|
85
|
-
@@SWIZZLE_MAPPING = { 3 => self, 4 => ::Snow::Vec4, 'x' => 0, 'y' => 1, 'z' => 2 }
|
91
|
+
@@SWIZZLE_CHARS = /^[xyz]{2,4}$/
|
92
|
+
@@SWIZZLE_MAPPING = { 2 => ::Snow::Vec2, 3 => self, 4 => ::Snow::Vec4, 'x' => 0, 'y' => 1, 'z' => 2 }
|
86
93
|
include ::Snow::SwizzleSupport
|
87
94
|
end
|
88
95
|
|
89
96
|
class Snow::Vec4
|
90
|
-
@@SWIZZLE_CHARS = /^[xyzw]{
|
91
|
-
@@SWIZZLE_MAPPING = { 3 => ::Snow::Vec3, 4 => self, 'x' => 0, 'y' => 1, 'z' => 2, 'w' => 3 }
|
97
|
+
@@SWIZZLE_CHARS = /^[xyzw]{2,4}$/
|
98
|
+
@@SWIZZLE_MAPPING = { 2 => ::Snow::Vec2, 3 => ::Snow::Vec3, 4 => self, 'x' => 0, 'y' => 1, 'z' => 2, 'w' => 3 }
|
92
99
|
include ::Snow::SwizzleSupport
|
93
100
|
end
|
94
101
|
|
95
102
|
class Snow::Quat
|
96
|
-
@@SWIZZLE_CHARS = /^[xyzw]{
|
97
|
-
@@SWIZZLE_MAPPING = { 3 => ::Snow::Vec3, 4 => self, 'x' => 0, 'y' => 1, 'z' => 2, 'w' => 3 }
|
103
|
+
@@SWIZZLE_CHARS = /^[xyzw]{2,4}$/
|
104
|
+
@@SWIZZLE_MAPPING = { 2 => ::Snow::Vec2, 3 => ::Snow::Vec3, 4 => self, 'x' => 0, 'y' => 1, 'z' => 2, 'w' => 3 }
|
98
105
|
include ::Snow::SwizzleSupport
|
99
106
|
end
|
data/lib/snow-math/to_a.rb
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
# Copyright (c) 2013 Noel Raymond Cower. All rights reserved.
|
3
3
|
# See COPYING for license details.
|
4
4
|
|
5
|
-
require 'snow-math'
|
5
|
+
require 'snow-math/bindings'
|
6
6
|
|
7
7
|
module Snow
|
8
8
|
|
@@ -107,12 +107,30 @@ module Snow
|
|
107
107
|
|
108
108
|
end
|
109
109
|
|
110
|
+
class Vec2 ; include ::Snow::ArraySupport ; end
|
110
111
|
class Vec3 ; include ::Snow::ArraySupport ; end
|
111
112
|
class Vec4 ; include ::Snow::ArraySupport ; end
|
112
113
|
class Quat ; include ::Snow::ArraySupport ; end
|
113
114
|
class Mat3 ; include ::Snow::ArraySupport ; end
|
114
115
|
class Mat4 ; include ::Snow::ArraySupport ; end
|
115
116
|
|
117
|
+
if const_defined?(:Vec2Array)
|
118
|
+
class Vec2Array
|
119
|
+
include ::Snow::ArraySupport
|
120
|
+
|
121
|
+
#
|
122
|
+
# Duplicates the Vec2Array and returns it.
|
123
|
+
#
|
124
|
+
# call-seq: dup -> new vec3_array
|
125
|
+
#
|
126
|
+
def dup
|
127
|
+
self.class.new(self)
|
128
|
+
end
|
129
|
+
|
130
|
+
alias_method :clone, :dup
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
116
134
|
if const_defined?(:Vec3Array)
|
117
135
|
class Vec3Array
|
118
136
|
include ::Snow::ArraySupport
|
@@ -125,6 +143,8 @@ module Snow
|
|
125
143
|
def dup
|
126
144
|
self.class.new(self)
|
127
145
|
end
|
146
|
+
|
147
|
+
alias_method :clone, :dup
|
128
148
|
end
|
129
149
|
end
|
130
150
|
|
@@ -140,6 +160,8 @@ module Snow
|
|
140
160
|
def dup
|
141
161
|
self.class.new(self)
|
142
162
|
end
|
163
|
+
|
164
|
+
alias_method :clone, :dup
|
143
165
|
end
|
144
166
|
end
|
145
167
|
|
@@ -155,6 +177,8 @@ module Snow
|
|
155
177
|
def dup
|
156
178
|
self.class.new(self)
|
157
179
|
end
|
180
|
+
|
181
|
+
alias_method :clone, :dup
|
158
182
|
end
|
159
183
|
end
|
160
184
|
|
@@ -170,6 +194,8 @@ module Snow
|
|
170
194
|
def dup
|
171
195
|
self.class.new(self)
|
172
196
|
end
|
197
|
+
|
198
|
+
alias_method :clone, :dup
|
173
199
|
end
|
174
200
|
end
|
175
201
|
|
@@ -185,6 +211,8 @@ module Snow
|
|
185
211
|
def dup
|
186
212
|
self.class.new(self)
|
187
213
|
end
|
214
|
+
|
215
|
+
alias_method :clone, :dup
|
188
216
|
end
|
189
217
|
end
|
190
218
|
|
@@ -0,0 +1,168 @@
|
|
1
|
+
# This file is part of ruby-snowmath.
|
2
|
+
# Copyright (c) 2013 Noel Raymond Cower. All rights reserved.
|
3
|
+
# See COPYING for license details.
|
4
|
+
|
5
|
+
require 'snow-math/bindings'
|
6
|
+
|
7
|
+
module Snow ; end
|
8
|
+
|
9
|
+
if Snow.const_defined?(:Vec2Array)
|
10
|
+
#
|
11
|
+
# A contiguous array of Vec2s. Allocated as a single block of memory so that
|
12
|
+
# it can easily be passed back to C libraries (like OpenGL) and to aid with
|
13
|
+
# cache locality.
|
14
|
+
#
|
15
|
+
# Useful also to represent texture coordinates and 2D positions and
|
16
|
+
# displacements.
|
17
|
+
#
|
18
|
+
class Snow::Vec2Array
|
19
|
+
class << self ; alias_method :[], :new ; end
|
20
|
+
|
21
|
+
alias_method :[], :fetch
|
22
|
+
alias_method :[]=, :store
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
#
|
27
|
+
# A 2-component vector class.
|
28
|
+
#
|
29
|
+
class Snow::Vec2
|
30
|
+
|
31
|
+
class << self ; alias_method :[], :new ; end
|
32
|
+
|
33
|
+
alias_method :[], :fetch
|
34
|
+
alias_method :[]=, :store
|
35
|
+
alias_method :dup, :copy
|
36
|
+
alias_method :clone, :copy
|
37
|
+
|
38
|
+
|
39
|
+
def to_vec2
|
40
|
+
Vec2.new(self)
|
41
|
+
end
|
42
|
+
|
43
|
+
def to_vec3
|
44
|
+
Vec3.new(self)
|
45
|
+
end
|
46
|
+
|
47
|
+
def to_vec4
|
48
|
+
Vec4.new(self)
|
49
|
+
end
|
50
|
+
|
51
|
+
def to_quat
|
52
|
+
Quat.new(self)
|
53
|
+
end
|
54
|
+
|
55
|
+
# Returns the X component of the vector.
|
56
|
+
#
|
57
|
+
# call-seq: x -> float
|
58
|
+
def x
|
59
|
+
self[0]
|
60
|
+
end
|
61
|
+
|
62
|
+
# Sets the X component of the vector.
|
63
|
+
#
|
64
|
+
# call-seq: x = value -> value
|
65
|
+
def x=(value)
|
66
|
+
self[0] = value
|
67
|
+
end
|
68
|
+
|
69
|
+
# Returns the Y component of the vector.
|
70
|
+
#
|
71
|
+
# call-seq: y -> float
|
72
|
+
def y
|
73
|
+
self[1]
|
74
|
+
end
|
75
|
+
|
76
|
+
# Sets the Y component of the vector.
|
77
|
+
#
|
78
|
+
# call-seq: y = value -> value
|
79
|
+
def y=(value)
|
80
|
+
self[1] = value
|
81
|
+
end
|
82
|
+
|
83
|
+
# Calls #normalize(self)
|
84
|
+
#
|
85
|
+
# call-seq: normalize! -> self
|
86
|
+
def normalize!
|
87
|
+
normalize self
|
88
|
+
end
|
89
|
+
|
90
|
+
# Calls #inverse(self)
|
91
|
+
#
|
92
|
+
# call-seq: inverse! -> self
|
93
|
+
def inverse!
|
94
|
+
inverse self
|
95
|
+
end
|
96
|
+
|
97
|
+
# Calls #negate(self)
|
98
|
+
#
|
99
|
+
# call-seq: negate! -> self
|
100
|
+
def negate!
|
101
|
+
negate self
|
102
|
+
end
|
103
|
+
|
104
|
+
# Calls #multiply_vec2(rhs, self)
|
105
|
+
#
|
106
|
+
# call-seq: multiply_vec2!(rhs) -> self
|
107
|
+
def multiply_vec2!(rhs)
|
108
|
+
multiply_vec2 rhs, self
|
109
|
+
end
|
110
|
+
|
111
|
+
# Calls #multiply_vec2 and #scale, respectively.
|
112
|
+
#
|
113
|
+
# call-seq:
|
114
|
+
# multiply(vec2, output = nil) -> output or new vec2
|
115
|
+
# multiply(scalar, output = nil) -> output or new vec2
|
116
|
+
def multiply(rhs, output = nil)
|
117
|
+
case rhs
|
118
|
+
when ::Snow::Vec2, ::Snow::Vec3, ::Snow::Vec4, ::Snow::Quat then multiply_vec2(rhs, output)
|
119
|
+
when Numeric then scale(rhs, output)
|
120
|
+
else raise TypeError, "Invalid type for RHS"
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
# Calls #multiply(rhs, self)
|
125
|
+
#
|
126
|
+
# call-seq: multiply!(rhs) -> self
|
127
|
+
def multiply!(rhs)
|
128
|
+
multiply rhs, self
|
129
|
+
end
|
130
|
+
|
131
|
+
# Calls #add(rhs, self)
|
132
|
+
#
|
133
|
+
# call-seq: add!(rhs) -> self
|
134
|
+
def add!(rhs)
|
135
|
+
add rhs, self
|
136
|
+
end
|
137
|
+
|
138
|
+
# Calls #subtract(rhs, self)
|
139
|
+
#
|
140
|
+
# call-seq: subtract!(rhs) -> self
|
141
|
+
def subtract!(rhs)
|
142
|
+
subtract rhs, self
|
143
|
+
end
|
144
|
+
|
145
|
+
# Calls #scale(rhs, self)
|
146
|
+
#
|
147
|
+
# call-seq: scale!(rhs) -> self
|
148
|
+
def scale!(rhs)
|
149
|
+
scale rhs, self
|
150
|
+
end
|
151
|
+
|
152
|
+
# Calls #divide(rhs, self)
|
153
|
+
#
|
154
|
+
# call-seq: divide!(rhs) -> self
|
155
|
+
def divide!(rhs)
|
156
|
+
divide rhs, self
|
157
|
+
end
|
158
|
+
|
159
|
+
|
160
|
+
alias_method :-, :subtract
|
161
|
+
alias_method :+, :add
|
162
|
+
alias_method :*, :multiply
|
163
|
+
alias_method :/, :divide
|
164
|
+
alias_method :**, :dot_product
|
165
|
+
alias_method :-@, :negate
|
166
|
+
alias_method :~, :inverse
|
167
|
+
|
168
|
+
end
|