quaternion 0.1.0 → 0.1.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.
- checksums.yaml +4 -4
- data/lib/quaternion/version.rb +1 -1
- data/lib/quaternion.rb +48 -0
- data/quaternion.gemspec +1 -5
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 819da0242c1ec7196ca1cf3ac0e5e11004235696
|
4
|
+
data.tar.gz: c8b70be61075d0ead7570014bcbc5f306d88e465
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6f67f4c07fb013157cd9230ce6fbd35c1d5d084616449b4c8337e1989dcd32577404a1fc273fda2ec99877b800c62b7948f0d23c2a2fddb9de7832a4f232fd54
|
7
|
+
data.tar.gz: 4c7f6ca6b558480f4bde5be720c22c13ff2f9e2579a5364a167f77a9d8f7bf1f14726a69a35a9ea0d627cccbf6adb3f699758338676215154eeaae6e5371151d
|
data/lib/quaternion/version.rb
CHANGED
data/lib/quaternion.rb
CHANGED
@@ -9,6 +9,24 @@ require "#{root_dir}/lib/quaternion/numeric"
|
|
9
9
|
class Quaternion
|
10
10
|
include Math
|
11
11
|
|
12
|
+
##
|
13
|
+
# Returns an instance of Quaternion for rotateion aroud +axis+ with angle
|
14
|
+
# +theta+.
|
15
|
+
# qrot = Quaternion.rotation([1.0, 1.0, 1.0], PI/2.0)
|
16
|
+
def self.rotation axis, theta
|
17
|
+
case axis
|
18
|
+
when Array
|
19
|
+
axis = Vector.elements(axis, true)
|
20
|
+
axis = axis.normalize
|
21
|
+
when Vector
|
22
|
+
axis = axis.normalize
|
23
|
+
else
|
24
|
+
raise ArgumentError, "Invalid type"
|
25
|
+
end
|
26
|
+
|
27
|
+
return Quaternion.new(cos(theta/2.0), axis*sin(theta/2.0))
|
28
|
+
end
|
29
|
+
|
12
30
|
##
|
13
31
|
# Returns an instance of Quaternion.
|
14
32
|
# The following code instanciate a quaternion of
|
@@ -221,5 +239,35 @@ class Quaternion
|
|
221
239
|
return "Quaternion(#{@w}; #{@v})"
|
222
240
|
end
|
223
241
|
alias to_s inspect
|
242
|
+
|
243
|
+
##
|
244
|
+
# Rotates a point +v+. This method does not check if the quaternion's norm is
|
245
|
+
# 1 or not.
|
246
|
+
# qrot = Quaternion.rotation([1.0, 1.0, 1.0], PI/2.0)
|
247
|
+
# qrot.rotate([1.0, 0.0, 0.0]) # =>[0.3333333333333334, 0.9106836025229592, -0.24401693585629253]
|
248
|
+
def rotate v
|
249
|
+
q_v = Quaternion.new(0.0, v)
|
250
|
+
|
251
|
+
res = self*q_v*(self.conjugate)
|
252
|
+
|
253
|
+
case v
|
254
|
+
when Array
|
255
|
+
return res[:v].to_a
|
256
|
+
when Vector
|
257
|
+
return res[:v]
|
258
|
+
end
|
259
|
+
end
|
260
|
+
|
261
|
+
private
|
262
|
+
def to_vector v
|
263
|
+
case v
|
264
|
+
when Array
|
265
|
+
Vector.elements(v, true)
|
266
|
+
when Vector
|
267
|
+
v.clone
|
268
|
+
else
|
269
|
+
raise ArgumentError, "Fail to convert to Vector"
|
270
|
+
end
|
271
|
+
end
|
224
272
|
end
|
225
273
|
|
data/quaternion.gemspec
CHANGED
@@ -10,7 +10,7 @@ Gem::Specification.new do |spec|
|
|
10
10
|
|
11
11
|
spec.summary = %q{Quaternion class}
|
12
12
|
#spec.description = %q{TODO: Write a longer description or delete this line.}
|
13
|
-
|
13
|
+
spec.homepage = "https://github.com/tanahiro/quaternion"
|
14
14
|
spec.license = "MIT"
|
15
15
|
|
16
16
|
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
@@ -18,10 +18,6 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
|
-
#if spec.respond_to?(:metadata)
|
22
|
-
# spec.metadata['allowed_push_host'] = "TODO: Set to 'http://mygemserver.com' to prevent pushes to rubygems.org, or delete to allow pushes to any server."
|
23
|
-
#end
|
24
|
-
|
25
21
|
spec.required_ruby_version = '>= 2.2.1'
|
26
22
|
|
27
23
|
spec.add_development_dependency "bundler", "~> 1.9"
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: quaternion
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Hiroyuki Tanaka
|
@@ -71,7 +71,7 @@ files:
|
|
71
71
|
- lib/quaternion/numeric.rb
|
72
72
|
- lib/quaternion/version.rb
|
73
73
|
- quaternion.gemspec
|
74
|
-
homepage:
|
74
|
+
homepage: https://github.com/tanahiro/quaternion
|
75
75
|
licenses:
|
76
76
|
- MIT
|
77
77
|
metadata: {}
|