unit_quaternion 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -3,4 +3,5 @@
3
3
  other/*
4
4
  Gemfile.lock
5
5
  pkg/*
6
- coverage
6
+ coverage
7
+ doc
data/CHANGELOG ADDED
@@ -0,0 +1,2 @@
1
+ Version 0.0.3: Initial release
2
+ Version 0.0.4: Improve documentation
data/lib/quaternion.rb CHANGED
@@ -39,51 +39,51 @@ class Quaternion
39
39
  return @beta0, @beta_s
40
40
  end
41
41
 
42
- # Returns the magnitude of the quaternion
42
+ # Returns the magnitude of the quaternion.
43
43
  def norm
44
44
  return Math.sqrt(@beta0**2 + @beta_s.norm()**2)
45
45
  end
46
46
 
47
- # Returns the conjugate of the quaternion
47
+ # Returns the conjugate of the quaternion.
48
48
  def conjugate
49
49
  return Quaternion.new(@beta0, *(-1*@beta_s))
50
50
  end
51
51
 
52
- # Returns the multiplicative inverse of the quaterion
52
+ # Returns the multiplicative inverse of the quaterion.
53
53
  def inverse
54
54
  return self.conjugate() / self.norm() ** 2
55
55
  end
56
56
 
57
57
  # Returns a normalized quaternion. q.normalized() is equivalent to
58
- # q/q.norm()
58
+ # q/q.norm().
59
59
  def normalized
60
60
  return self / norm()
61
61
  end
62
62
 
63
- # Returns the sum of two quaternions
63
+ # Returns the sum of two quaternions.
64
64
  def +(q)
65
65
  beta0, beta_s = q.get()
66
66
  return Quaternion.new(@beta0 + beta0, *(@beta_s + beta_s))
67
67
  end
68
68
 
69
- # Returns the difference of two quaternions
69
+ # Returns the difference of two quaternions.
70
70
  def -(q)
71
71
  beta0, beta_s = q.get()
72
72
  return Quaternion.new(@beta0 - beta0, *(@beta_s - beta_s))
73
73
  end
74
74
 
75
- # Returns the additive inverse of the quaternion
75
+ # Returns the additive inverse of the quaternion.
76
76
  def -@
77
77
  Quaternion.new(-@beta0, -@beta_s[0], -@beta_s[1], -@beta_s[2])
78
78
  end
79
79
 
80
- # Returns the result of dividing the quaternion by a scalar
80
+ # Returns the result of dividing the quaternion by a scalar.
81
81
  def /(s)
82
82
  return Quaternion.new(@beta0 / s, *(@beta_s / s))
83
83
  end
84
84
 
85
85
  # Returns the result of multiplying the quaternion by a scalar or
86
- # another quaternion
86
+ # another quaternion.
87
87
  def *(q)
88
88
  if q.is_a?(Numeric)
89
89
  return Quaternion.new(@beta0 * q, *(@beta_s * q))
@@ -98,7 +98,7 @@ class Quaternion
98
98
  end
99
99
 
100
100
  # Returns true if two quaternions are equal (meaning that their
101
- # corresponding entries are equal to each other) and false otherwise
101
+ # corresponding entries are equal to each other) and false otherwise.
102
102
  def ==(q)
103
103
  if get() == q.get()
104
104
  return true
@@ -107,7 +107,7 @@ class Quaternion
107
107
  end
108
108
  end
109
109
 
110
- # Returns the string representation of the quaternion
110
+ # Returns the string representation of the quaternion.
111
111
  def to_s
112
112
  return "(" + @beta0.to_s + ", " + @beta_s.to_s + ")"
113
113
  end
@@ -118,7 +118,7 @@ class Quaternion
118
118
 
119
119
  private
120
120
  def cross_product(v1, v2)
121
- # returns the cross product of vectors v1 and v2
121
+ # returns the cross product of vectors v1 and v2.
122
122
  return Vector[ v1[1]*v2[2] - v1[2]*v2[1],
123
123
  v1[2]*v2[0] - v1[0]*v2[2],
124
124
  v1[0]*v2[1] - v1[1]*v2[0] ]
@@ -1,3 +1,3 @@
1
- module Quaternion
2
- VERSION = "0.0.3"
1
+ class UnitQuaternion
2
+ VERSION = "0.0.4"
3
3
  end
@@ -32,8 +32,6 @@ class UnitQuaternion < Quaternion
32
32
  # +angle+:: A scalar representing the angle of the rotation (in radians)
33
33
  # +axis+:: A vector representing the axis of rotation (need not be a unit vector)
34
34
  def self.fromAngleAxis(angle, axis)
35
- # intializes a quaternion from the angle-axis representation of a
36
- # rotation
37
35
  q = UnitQuaternion.new()
38
36
  q.setAngleAxis(angle, axis)
39
37
  return q
@@ -52,7 +50,7 @@ class UnitQuaternion < Quaternion
52
50
  return q
53
51
  end
54
52
 
55
- # Initializes a quaternion from a rotation matrix
53
+ # Initializes a quaternion from a rotation matrix.
56
54
  #
57
55
  # Params:
58
56
  # +mat+:: A 3x3 orthonormal matrix.
@@ -71,7 +69,6 @@ class UnitQuaternion < Quaternion
71
69
  # +y+:: the j-component
72
70
  # +z+:: the k-component
73
71
  def set(w, x, y, z)
74
- # sets the values of the quaternion
75
72
  super(w, x, y, z)
76
73
  @beta0, @beta_s = normalized().get()
77
74
  end
@@ -84,8 +81,6 @@ class UnitQuaternion < Quaternion
84
81
  # +angle+:: A scalar representing the angle of the rotation (in radians)
85
82
  # +axis+:: A vector representing the axis of rotation (need not be a unit vector)
86
83
  def setAngleAxis(angle, axis)
87
- # sets the quaternion based on the angle-axis representation of a
88
- # rotation
89
84
  if axis == Vector[0,0,0]
90
85
  raise(ArgumentError, "Axis must not be the zero vector")
91
86
  end
@@ -107,8 +102,6 @@ class UnitQuaternion < Quaternion
107
102
  # +angle+:: A scalar representing the angle of rotation (in radians)
108
103
  # +axis+:: A unit vector representing the axis of rotation
109
104
  def getAngleAxis
110
- # return the angle-axis representation of the rotation contained in
111
- # this quaternion
112
105
  angle = 2*Math.acos(@beta0)
113
106
 
114
107
  # if sin(theta/2) = 0, then theta = 2*n*PI, where n is any integer,
@@ -166,14 +159,6 @@ class UnitQuaternion < Quaternion
166
159
  # +theta2+:: The angle of rotation about the second axis
167
160
  # +theta3+:: The angle of rotation about the third axis
168
161
  def getEuler(axes)
169
- # Returns the Euler angles about the specified axes. The axes should
170
- # be specified as a string, and can be any permutation (with
171
- # replacement) of 'X', 'Y', and 'Z', as long as no letter is adjacent
172
- # to itself (for example, 'XYX' is valid, but 'XXY' is not).
173
- # If the axes are uppercase, this function returns the angles about
174
- # the global axes. If they are lowercase, this function returns the
175
- # angles about the body-fixed axes.
176
- #
177
162
  # This method implements Shoemake's algorithm for finding the Euler
178
163
  # angles from a rotation matrix, found in Graphics Gems IV (pg. 222).
179
164
 
@@ -244,7 +229,7 @@ class UnitQuaternion < Quaternion
244
229
  return theta1, theta2, theta3
245
230
  end
246
231
 
247
- # Sets the values of the quaternion from a rotation matrix
232
+ # Sets the values of the quaternion from a rotation matrix.
248
233
  #
249
234
  # Params:
250
235
  # +mat+:: A 3x3 orthonormal matrix.
@@ -263,7 +248,6 @@ class UnitQuaternion < Quaternion
263
248
 
264
249
  # Returns the rotation matrix corresponding to this quaternion.
265
250
  def getRotationMatrix
266
- # returns the rotation matrix corresponding to this quaternion
267
251
  return Matrix[ [ @beta0**2 + @beta_s[0]**2 - @beta_s[1]**2 - @beta_s[2]**2,
268
252
  2*(@beta_s[0]*@beta_s[1] - @beta0*@beta_s[2]),
269
253
  2*(@beta_s[0]*@beta_s[2] + @beta0*@beta_s[1]) ],
@@ -284,7 +268,7 @@ class UnitQuaternion < Quaternion
284
268
  return getRotationMatrix() * vec
285
269
  end
286
270
 
287
- # Returns the inverse of the quaternion
271
+ # Returns the inverse of the quaternion.
288
272
  def inverse
289
273
  result = UnitQuaternion.new
290
274
  result.set(@beta0, *(-1*@beta_s))
@@ -5,7 +5,7 @@ require 'unit_quaternion/version'
5
5
 
6
6
  Gem::Specification.new do |spec|
7
7
  spec.name = "unit_quaternion"
8
- spec.version = Quaternion::VERSION
8
+ spec.version = UnitQuaternion::VERSION
9
9
  spec.authors = ["Cory Crean"]
10
10
  spec.email = ["cory.crean@gmail.com"]
11
11
  spec.description = %q{Provides a general Quaternion class, and UnitQuaternion class to represent rotations}
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: unit_quaternion
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -84,6 +84,7 @@ extensions: []
84
84
  extra_rdoc_files: []
85
85
  files:
86
86
  - .gitignore
87
+ - CHANGELOG
87
88
  - Gemfile
88
89
  - LICENSE.txt
89
90
  - README.md