mageo 0.0.0 → 0.0.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.
@@ -1,9 +1,9 @@
1
1
  require 'mageo/vector3d.rb'
2
2
 
3
3
  class Array
4
- def to_v3di
5
- Vector3DInternal[ *self ]
6
- end
4
+ def to_v3di
5
+ Vector3DInternal[ *self ]
6
+ end
7
7
  end
8
8
 
9
9
  # 内部座標系( internal coordinate ) でのベクトルを表現するクラス。
@@ -17,109 +17,108 @@ end
17
17
  # 軸に関係ない抽象的な内部座標について議論することもありうるし、
18
18
  # 軸情報が必要なのは to_v3d メソッドくらいなので。
19
19
  class Vector3DInternal < Vector3D
20
- class RangeError < Exception; end
21
- class TypeError < Exception; end
22
-
23
- #要素数3以外では例外 Vector3DInternalSizeError を発生。
24
- def self.[]( *args )
25
- raise RangeError unless args.size == 3
26
- super *args
27
- end
28
-
29
- ## Return order of vector. In this class, always three.
30
- #def size
31
- # return 3
32
- #end
33
-
34
- # Return self.
35
- def to_v3di
36
- return self
37
- end
38
-
39
- # Convert to Vector3D. Non-destructive.
40
- def to_v3d( axes )
41
- result = [ 0.0, 0.0, 0.0 ]
42
- 3.times do |i|
43
- 3.times do |j|
44
- result[i] += ( self[j] * axes[j][i] )
45
- end
46
- end
47
- Vector3D[ *result ]
48
- end
49
-
50
- ## Return an array converted from self.
51
- #def to_a
52
- # @coords
53
- #end
54
-
55
- ## Check the same vector self and other.
56
- ## Return false if the size of other is not three.
57
- #def ==( other )
58
- # return false if other.size != 3
59
- # 3.times { |i|
60
- # return false if self[i] != other[i]
61
- # }
62
- # return true
63
- #end
64
-
65
- #0〜2 以外の要素にアクセスしようとすると例外 Vector3DInternal::RangeError を発生。
66
- def []( index )
67
- raise RangeError if ( index < 0 || 2 < index )
68
- super index
69
- end
70
-
71
- #0〜2 以外の要素にアクセスしようとすると例外 Vector3DInternal::RangeError を発生。
72
- def []=( index, val )
73
- raise RangeError if ( index < 0 || 2 < index )
74
- super index, val
75
- end
76
-
77
- #ベクトルとしての加算
78
- def +(vec)
79
- unless vec.class == Vector3DInternal
80
- raise TypeError,
81
- "Argument: #{vec.inspect}, #{vec.class}."
82
- end
83
- result = Vector3DInternal[0.0, 0.0, 0.0]
84
- 3.times do |i|
85
- result[ i ] = (self[ i ] + vec[ i ])
86
- end
87
- result
88
- end
89
-
90
- #ベクトルとしての減算
91
- def -( vec )
92
- unless vec.class == Vector3DInternal
93
- raise TypeError,
94
- "Argument: #{vec.inspect}, #{vec.class}."
95
- end
96
- result = Vector3DInternal[0.0, 0.0, 0.0]
97
- 3.times do |i|
98
- result[ i ] = (self[ i ] - vec[ i ])
99
- end
100
- result
101
- end
102
-
103
- #ベクトルとしての乗算
104
- def *( val )
105
- result = Vector3DInternal[0.0, 0.0, 0.0]
106
- 3.times do |i|
107
- result[ i ] = ( self[ i ] * val )
108
- end
109
- result
110
- end
111
-
112
- ## each method
113
- #def each
114
- # @coords.each { |i|
115
- # yield( i )
116
- # }
117
- #end
118
-
119
- #private
120
- ##
121
- #def initialize( a, b, c )
122
- # @coords = [ a, b, c ]
123
- #end
124
-
20
+ class RangeError < Exception; end
21
+ class TypeError < Exception; end
22
+
23
+ #要素数3以外では例外 Vector3DInternalSizeError を発生。
24
+ def self.[]( *args )
25
+ raise RangeError unless args.size == 3
26
+ super *args
27
+ end
28
+
29
+ ## Return order of vector. In this class, always three.
30
+ #def size
31
+ # return 3
32
+ #end
33
+
34
+ # Return self.
35
+ def to_v3di
36
+ return self
37
+ end
38
+
39
+ # Convert to Vector3D. Non-destructive.
40
+ def to_v3d( axes )
41
+ result = [ 0.0, 0.0, 0.0 ]
42
+ 3.times do |i|
43
+ 3.times do |j|
44
+ result[i] += ( self[j] * axes[j][i] )
45
+ end
46
+ end
47
+ Vector3D[ *result ]
48
+ end
49
+
50
+ ## Return an array converted from self.
51
+ #def to_a
52
+ # @coords
53
+ #end
54
+
55
+ ## Check the same vector self and other.
56
+ ## Return false if the size of other is not three.
57
+ #def ==( other )
58
+ # return false if other.size != 3
59
+ # 3.times { |i|
60
+ # return false if self[i] != other[i]
61
+ # }
62
+ # return true
63
+ #end
64
+
65
+ #0〜2 以外の要素にアクセスしようとすると例外 Vector3DInternal::RangeError を発生。
66
+ def []( index )
67
+ raise RangeError if ( index < 0 || 2 < index )
68
+ super index
69
+ end
70
+
71
+ #0〜2 以外の要素にアクセスしようとすると例外 Vector3DInternal::RangeError を発生。
72
+ def []=( index, val )
73
+ raise RangeError if ( index < 0 || 2 < index )
74
+ super index, val
75
+ end
76
+
77
+ #ベクトルとしての加算
78
+ def +(vec)
79
+ unless vec.class == Vector3DInternal
80
+ raise TypeError,
81
+ "Argument: #{vec.inspect}, #{vec.class}."
82
+ end
83
+ result = Vector3DInternal[0.0, 0.0, 0.0]
84
+ 3.times do |i|
85
+ result[ i ] = (self[ i ] + vec[ i ])
86
+ end
87
+ result
88
+ end
89
+
90
+ #ベクトルとしての減算
91
+ def -( vec )
92
+ unless vec.class == Vector3DInternal
93
+ raise TypeError,
94
+ "Argument: #{vec.inspect}, #{vec.class}."
95
+ end
96
+ result = Vector3DInternal[0.0, 0.0, 0.0]
97
+ 3.times do |i|
98
+ result[ i ] = (self[ i ] - vec[ i ])
99
+ end
100
+ result
101
+ end
102
+
103
+ #ベクトルとしての乗算
104
+ def *( val )
105
+ result = Vector3DInternal[0.0, 0.0, 0.0]
106
+ 3.times do |i|
107
+ result[ i ] = ( self[ i ] * val )
108
+ end
109
+ result
110
+ end
111
+
112
+ ## each method
113
+ #def each
114
+ # @coords.each { |i|
115
+ # yield( i )
116
+ # }
117
+ #end
118
+
119
+ #private
120
+ ##
121
+ #def initialize( a, b, c )
122
+ # @coords = [ a, b, c ]
123
+ #end
125
124
  end
data/mageo.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "mageo"
8
- s.version = "0.0.0"
8
+ s.version = "0.0.1"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["ippei94da"]
12
- s.date = "2012-04-04"
12
+ s.date = "2013-02-02"
13
13
  s.description = "MAth GEOmetry library to deal with 2 and 3 dimension space.\n Cartesian and internal coordinate systems can be used.\n This includes besic objects in 3 dimensional space.\n "
14
14
  s.email = "ippei94da@gmail.com"
15
15
  s.extra_rdoc_files = [
@@ -18,6 +18,7 @@ Gem::Specification.new do |s|
18
18
  ]
19
19
  s.files = [
20
20
  ".document",
21
+ "CHANGES",
21
22
  "Gemfile",
22
23
  "LICENSE.txt",
23
24
  "README.rdoc",
@@ -56,34 +57,37 @@ Gem::Specification.new do |s|
56
57
  s.homepage = "http://github.com/ippei94da/mageo"
57
58
  s.licenses = ["MIT"]
58
59
  s.require_paths = ["lib"]
59
- s.rubygems_version = "1.8.21"
60
+ s.rubygems_version = "1.8.11"
60
61
  s.summary = "MAth GEOmetry library to deal with 2 and 3 dimension space."
61
62
 
62
63
  if s.respond_to? :specification_version then
63
64
  s.specification_version = 3
64
65
 
65
66
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
66
- s.add_development_dependency(%q<rdoc>, ["~> 3.12"])
67
- s.add_development_dependency(%q<bundler>, ["~> 1.1.3"])
67
+ s.add_development_dependency(%q<builtinextension>, [">= 0"])
68
+ s.add_development_dependency(%q<bundler>, ["~> 1.2.2"])
68
69
  s.add_development_dependency(%q<jeweler>, ["~> 1.8.3"])
70
+ s.add_development_dependency(%q<malge>, [">= 0.0.2"])
71
+ s.add_development_dependency(%q<psych>, [">= 0"])
72
+ s.add_development_dependency(%q<rdoc>, ["~> 3.12"])
69
73
  s.add_development_dependency(%q<simplecov>, [">= 0"])
70
- s.add_development_dependency(%q<builtinextension>, [">= 0"])
71
- s.add_development_dependency(%q<malge>, [">= 0.0.1"])
72
74
  else
73
- s.add_dependency(%q<rdoc>, ["~> 3.12"])
74
- s.add_dependency(%q<bundler>, ["~> 1.1.3"])
75
+ s.add_dependency(%q<builtinextension>, [">= 0"])
76
+ s.add_dependency(%q<bundler>, ["~> 1.2.2"])
75
77
  s.add_dependency(%q<jeweler>, ["~> 1.8.3"])
78
+ s.add_dependency(%q<malge>, [">= 0.0.2"])
79
+ s.add_dependency(%q<psych>, [">= 0"])
80
+ s.add_dependency(%q<rdoc>, ["~> 3.12"])
76
81
  s.add_dependency(%q<simplecov>, [">= 0"])
77
- s.add_dependency(%q<builtinextension>, [">= 0"])
78
- s.add_dependency(%q<malge>, [">= 0.0.1"])
79
82
  end
80
83
  else
81
- s.add_dependency(%q<rdoc>, ["~> 3.12"])
82
- s.add_dependency(%q<bundler>, ["~> 1.1.3"])
84
+ s.add_dependency(%q<builtinextension>, [">= 0"])
85
+ s.add_dependency(%q<bundler>, ["~> 1.2.2"])
83
86
  s.add_dependency(%q<jeweler>, ["~> 1.8.3"])
87
+ s.add_dependency(%q<malge>, [">= 0.0.2"])
88
+ s.add_dependency(%q<psych>, [">= 0"])
89
+ s.add_dependency(%q<rdoc>, ["~> 3.12"])
84
90
  s.add_dependency(%q<simplecov>, [">= 0"])
85
- s.add_dependency(%q<builtinextension>, [">= 0"])
86
- s.add_dependency(%q<malge>, [">= 0.0.1"])
87
91
  end
88
92
  end
89
93
 
data/test/test_axes.rb CHANGED
@@ -6,204 +6,203 @@ require "test/unit"
6
6
  require "mageo/axes.rb"
7
7
 
8
8
  class TC_Axes < Test::Unit::TestCase
9
- $tolerance = 1.0 * 10.0**(-10)
10
-
11
- def setup
12
- @a10 = Axes.new([[1.0]])
13
- @a20 = Axes.new([[1.0, 0.0], [0.0, 1.0]])
14
- @a30 = Axes.new([[1.0, 0.0, 0.0], [0.0, 1.0, 0.0], [0.0, 0.0, 1.0]])
15
- @a40 = Axes.new([
16
- [1.0, 0.0, 0.0, 0.0],
17
- [0.0, 1.0, 0.0, 0.0],
18
- [0.0, 0.0, 1.0, 0.0],
19
- [0.0, 0.0, 0.0, 1.0]
20
- ]
21
- )
22
-
23
- @a31 = Axes.new( [ [1.0, 0.0, 0.0], [0.0, 1.0, 0.0], [0.0, 0.0, 1.0] ] )
24
- @a32 = Axes.new( [ [0.5, 0.5, 0.0], [0.5, 0.0, 0.5], [0.0, 0.5, 0.5] ] )
25
- @a33 = Axes.new( [ [1.0, 0.0, 0.0], [1.0, 0.0, 0.0], [0.0, 0.0, 1.0] ] )
26
- @a34 = Axes.new( [ [0.5, 0.5, 0.0], [0.5, 0.0, 0.0], [0.0, 0.5, 0.0] ] )
27
- @a35 = Axes.new( [ [1.0, 1.0, 1.0], [0.0, 1.0, 1.0], [0.0, 0.0, 1.0] ] )
28
- @a36 = Axes.new( [ [1.0, 1.0, 1.0], [0.0,-1.0,-1.0], [0.0, 0.0, 1.0] ] )
29
-
30
- @vec_x = Vector[ 1.0, 0.0, 0.0 ]
31
- @vec_y = Vector[ 0.0, 1.0, 0.0 ]
32
- @vec_z = Vector[ 0.0, 0.0, 1.0 ]
33
- @vec_0 = Vector[ 0.0, 0.0, 0.0 ]
34
- @vec_1 = Vector[ 1.0, 1.0, 0.0 ]
35
- end
36
-
37
- def test_initialize
38
- assert_raise(Axes::InitializeError) { Axes.new([[]]) }
39
- assert_raise(Axes::InitializeError) { Axes.new([[1.0, 0.0, 0.0], [0.0, 1.0, 0.0]]) }
40
- assert_raise(Axes::InitializeError) { Axes.new([[1.0, 0.0, 0.0], [0.0, 1.0, 0.0], [1.0, 0.0, 0.0], [0.0, 1.0, 1.0]]) }
41
- assert_raise(Axes::InitializeError) { Axes.new([[1.0, 0.0], [0.0, 1.0, 0.0], [0.0, 0.0, 1.0]]) }
42
- assert_raise(Axes::InitializeError) { Axes.new([[1.0, 0.0, 0.0], [0.0, 1.0], [0.0, 0.0, 1.0]]) }
43
- assert_raise(Axes::InitializeError) { Axes.new([[1.0, 0.0, 0.0], [0.0, 1.0, 0.0], [0.0, 0.0]]) }
44
- assert_raise(Axes::InitializeError) { Axes.new([[1.0, 0.0, 0.0], [0.0, 1.0, 0.0], [0.0, 0.0, 1.0, 0.0]]) }
45
-
46
- assert_nothing_raised{ Axes.new([["1.0", "0.0", "0.0"], [0.0, 1.0, 0.0], [0.0, 0.0, 0.0]]) }
47
- assert_nothing_raised{ Axes.new([[1, 0, 0], [0, 1, 0], [0, 0, 0]]) }
48
- end
49
-
50
- def test_self_dependent?
51
- # Righthand
52
- assert_equal( false, Axes.dependent?( [ @vec_x, @vec_y, @vec_z ] ) )
53
- assert_equal( false, Axes.dependent?( [ @vec_y, @vec_z, @vec_x ] ) )
54
- assert_equal( false, Axes.dependent?( [ @vec_z, @vec_x, @vec_y ] ) )
55
-
56
- # Lefthand
57
- assert_equal( false, Axes.dependent?( [ @vec_z, @vec_y, @vec_x ] ) )
58
- assert_equal( false, Axes.dependent?( [ @vec_x, @vec_z, @vec_y ] ) )
59
- assert_equal( false, Axes.dependent?( [ @vec_y, @vec_x, @vec_z ] ) )
60
-
61
- # Including zero vector.
62
- assert_equal( true , Axes.dependent?( [ @vec_0, @vec_y, @vec_z ] ) )
63
- assert_equal( true , Axes.dependent?( [ @vec_0, @vec_z, @vec_x ] ) )
64
- assert_equal( true , Axes.dependent?( [ @vec_0, @vec_x, @vec_y ] ) )
65
-
66
- # One vector is on the plane of residual two vectors.
67
- assert_equal( true , Axes.dependent?( [ @vec_x, @vec_y, @vec_1 ] ) )
68
- end
69
-
70
- def test_self_independent?
71
- # Righthand
72
- assert_equal( true , Axes.independent?( [ @vec_x, @vec_y, @vec_z ] ) )
73
- assert_equal( true , Axes.independent?( [ @vec_y, @vec_z, @vec_x ] ) )
74
- assert_equal( true , Axes.independent?( [ @vec_z, @vec_x, @vec_y ] ) )
75
-
76
- # Lefthand
77
- assert_equal( true , Axes.independent?( [ @vec_z, @vec_y, @vec_x ] ) )
78
- assert_equal( true , Axes.independent?( [ @vec_x, @vec_z, @vec_y ] ) )
79
- assert_equal( true , Axes.independent?( [ @vec_y, @vec_x, @vec_z ] ) )
80
-
81
- # Including zero vector.
82
- assert_equal( false, Axes.independent?( [ @vec_0, @vec_y, @vec_z ] ) )
83
- assert_equal( false, Axes.independent?( [ @vec_0, @vec_z, @vec_x ] ) )
84
- assert_equal( false, Axes.independent?( [ @vec_0, @vec_x, @vec_y ] ) )
85
-
86
- # One vector is on the plane of residual two vectors.
87
- assert_equal( false, Axes.independent?( [ @vec_x, @vec_y, @vec_1 ] ) )
88
- end
89
-
90
- def test_size
91
- assert_equal( 1, @a10.size )
92
- assert_equal( 2, @a20.size )
93
- assert_equal( 3, @a30.size )
94
- assert_equal( 4, @a40.size )
95
- end
96
-
97
- def test_equal
98
- assert_equal( true , @a31 == Axes.new( [ [1.0, 0.0, 0.0], [0.0, 1.0, 0.0], [0.0, 0.0, 1.0] ] ))
99
- assert_equal( false, @a31 == Axes.new( [ [0.5, 0.5, 0.0], [0.0, 0.5, 0.5], [0.5, 0.0, 0.5] ] ))
100
- assert_equal( false, @a31 == Axes.new( [ [1.0, 1.0, 1.0], [0.0, 1.0, 1.0], [0.0, 0.0, 1.0] ] ))
101
-
102
- assert_equal( false, @a32 == Axes.new( [ [1.0, 0.0, 0.0], [0.0, 1.0, 0.0], [0.0, 0.0, 1.0] ] ))
103
- assert_equal( true , @a32 == Axes.new( [ [0.5, 0.5, 0.0], [0.5, 0.0, 0.5], [0.0, 0.5, 0.5] ] ))
104
- assert_equal( false, @a32 == Axes.new( [ [1.0, 1.0, 1.0], [0.0, 1.0, 1.0], [0.0, 0.0, 1.0] ] ))
105
-
106
- assert_equal( false, @a35 == Axes.new( [ [1.0, 0.0, 0.0], [0.0, 1.0, 0.0], [0.0, 0.0, 1.0] ] ))
107
- assert_equal( false, @a35 == Axes.new( [ [0.5, 0.5, 0.0], [0.0, 0.5, 0.5], [0.5, 0.0, 0.5] ] ))
108
- assert_equal( true , @a35 == Axes.new( [ [1.0, 1.0, 1.0], [0.0, 1.0, 1.0], [0.0, 0.0, 1.0] ] ))
109
- end
110
-
111
- def test_dependent?
112
- assert_equal( false, @a31.dependent? )
113
- assert_equal( false, @a32.dependent? )
114
- assert_equal( true , @a33.dependent? )
115
- assert_equal( true , @a34.dependent? )
116
- end
117
-
118
- def test_independent?
119
- assert_equal( true , @a31.independent? )
120
- assert_equal( true , @a32.independent? )
121
- assert_equal( false, @a33.independent? )
122
- assert_equal( false, @a34.independent? )
123
- end
124
-
125
- def test_to_a
126
- assert_equal( Array, @a31.to_a.class )
127
- assert_equal( Array, @a31.to_a[0].class )
128
- assert_equal( Array, @a31.to_a[1].class )
129
- assert_equal( Array, @a31.to_a[2].class )
130
- assert_in_delta( 1.0, @a31.to_a[0][0], $tolerance )
131
- assert_in_delta( 0.0, @a31.to_a[0][1], $tolerance )
132
- assert_in_delta( 0.0, @a31.to_a[0][2], $tolerance )
133
- assert_in_delta( 0.0, @a31.to_a[1][0], $tolerance )
134
- assert_in_delta( 1.0, @a31.to_a[1][1], $tolerance )
135
- assert_in_delta( 0.0, @a31.to_a[1][2], $tolerance )
136
- assert_in_delta( 0.0, @a31.to_a[2][0], $tolerance )
137
- assert_in_delta( 0.0, @a31.to_a[2][1], $tolerance )
138
- assert_in_delta( 1.0, @a31.to_a[2][2], $tolerance )
139
-
140
- assert_equal( Array, @a35.to_a.class )
141
- assert_equal( Array, @a35.to_a[0].class )
142
- assert_equal( Array, @a35.to_a[1].class )
143
- assert_equal( Array, @a35.to_a[2].class )
144
- assert_in_delta( 1.0, @a35.to_a[0][0], $tolerance )
145
- assert_in_delta( 1.0, @a35.to_a[0][1], $tolerance )
146
- assert_in_delta( 1.0, @a35.to_a[0][2], $tolerance )
147
- assert_in_delta( 0.0, @a35.to_a[1][0], $tolerance )
148
- assert_in_delta( 1.0, @a35.to_a[1][1], $tolerance )
149
- assert_in_delta( 1.0, @a35.to_a[1][2], $tolerance )
150
- assert_in_delta( 0.0, @a35.to_a[2][0], $tolerance )
151
- assert_in_delta( 0.0, @a35.to_a[2][1], $tolerance )
152
- assert_in_delta( 1.0, @a35.to_a[2][2], $tolerance )
153
- end
154
-
155
- def test_paren # []
156
- assert_equal( Vector, @a31[0].class )
157
- assert_equal( Vector, @a31[1].class )
158
- assert_equal( Vector, @a31[2].class )
159
- assert_in_delta( 1.0, @a31[0][0], $tolerance )
160
- assert_in_delta( 0.0, @a31[0][1], $tolerance )
161
- assert_in_delta( 0.0, @a31[0][2], $tolerance )
162
- assert_in_delta( 0.0, @a31[1][0], $tolerance )
163
- assert_in_delta( 1.0, @a31[1][1], $tolerance )
164
- assert_in_delta( 0.0, @a31[1][2], $tolerance )
165
- assert_in_delta( 0.0, @a31[2][0], $tolerance )
166
- assert_in_delta( 0.0, @a31[2][1], $tolerance )
167
- assert_in_delta( 1.0, @a31[2][2], $tolerance )
168
- end
169
-
170
- def test_each
171
- i = 0
172
- @a31.each { |vec|
173
- assert_equal( @a31[i], vec )
174
- i += 1
175
- }
176
-
177
- assert_raise( NoMethodError ) { @a31.map{ |vec| vec * 2.0 } }
178
- end
179
-
180
- def test_to_a
181
- t = @a10.to_a
182
- assert_equal(Array, t.class)
183
- assert_equal([[1.0]], t)
184
-
185
- t = @a20.to_a
186
- assert_equal(Array, t.class)
187
- assert_equal([[1.0, 0.0], [0.0, 1.0]], t)
188
-
189
- t = @a30.to_a
190
- assert_equal(Array, t.class)
191
- assert_equal([[1.0, 0.0, 0.0], [0.0, 1.0, 0.0], [0.0, 0.0, 1.0]] , t)
192
-
193
- t = @a40.to_a
194
- assert_equal(Array, t.class)
195
- assert_equal( [
196
- [1.0, 0.0, 0.0, 0.0],
197
- [0.0, 1.0, 0.0, 0.0],
198
- [0.0, 0.0, 1.0, 0.0],
199
- [0.0, 0.0, 0.0, 1.0]
200
- ], t
201
- )
202
-
203
- t = @a32.to_a
204
- assert_equal(Array, t.class)
205
- assert_equal( [ [0.5, 0.5, 0.0], [0.5, 0.0, 0.5], [0.0, 0.5, 0.5] ] , t)
206
- end
207
-
9
+ $tolerance = 1.0 * 10.0**(-10)
10
+
11
+ def setup
12
+ @a10 = Axes.new([[1.0]])
13
+ @a20 = Axes.new([[1.0, 0.0], [0.0, 1.0]])
14
+ @a30 = Axes.new([[1.0, 0.0, 0.0], [0.0, 1.0, 0.0], [0.0, 0.0, 1.0]])
15
+ @a40 = Axes.new([
16
+ [1.0, 0.0, 0.0, 0.0],
17
+ [0.0, 1.0, 0.0, 0.0],
18
+ [0.0, 0.0, 1.0, 0.0],
19
+ [0.0, 0.0, 0.0, 1.0]
20
+ ]
21
+ )
22
+
23
+ @a31 = Axes.new( [ [1.0, 0.0, 0.0], [0.0, 1.0, 0.0], [0.0, 0.0, 1.0] ] )
24
+ @a32 = Axes.new( [ [0.5, 0.5, 0.0], [0.5, 0.0, 0.5], [0.0, 0.5, 0.5] ] )
25
+ @a33 = Axes.new( [ [1.0, 0.0, 0.0], [1.0, 0.0, 0.0], [0.0, 0.0, 1.0] ] )
26
+ @a34 = Axes.new( [ [0.5, 0.5, 0.0], [0.5, 0.0, 0.0], [0.0, 0.5, 0.0] ] )
27
+ @a35 = Axes.new( [ [1.0, 1.0, 1.0], [0.0, 1.0, 1.0], [0.0, 0.0, 1.0] ] )
28
+ @a36 = Axes.new( [ [1.0, 1.0, 1.0], [0.0,-1.0,-1.0], [0.0, 0.0, 1.0] ] )
29
+
30
+ @vec_x = Vector[ 1.0, 0.0, 0.0 ]
31
+ @vec_y = Vector[ 0.0, 1.0, 0.0 ]
32
+ @vec_z = Vector[ 0.0, 0.0, 1.0 ]
33
+ @vec_0 = Vector[ 0.0, 0.0, 0.0 ]
34
+ @vec_1 = Vector[ 1.0, 1.0, 0.0 ]
35
+ end
36
+
37
+ def test_initialize
38
+ assert_raise(Axes::InitializeError) { Axes.new([[]]) }
39
+ assert_raise(Axes::InitializeError) { Axes.new([[1.0, 0.0, 0.0], [0.0, 1.0, 0.0]]) }
40
+ assert_raise(Axes::InitializeError) { Axes.new([[1.0, 0.0, 0.0], [0.0, 1.0, 0.0], [1.0, 0.0, 0.0], [0.0, 1.0, 1.0]]) }
41
+ assert_raise(Axes::InitializeError) { Axes.new([[1.0, 0.0], [0.0, 1.0, 0.0], [0.0, 0.0, 1.0]]) }
42
+ assert_raise(Axes::InitializeError) { Axes.new([[1.0, 0.0, 0.0], [0.0, 1.0], [0.0, 0.0, 1.0]]) }
43
+ assert_raise(Axes::InitializeError) { Axes.new([[1.0, 0.0, 0.0], [0.0, 1.0, 0.0], [0.0, 0.0]]) }
44
+ assert_raise(Axes::InitializeError) { Axes.new([[1.0, 0.0, 0.0], [0.0, 1.0, 0.0], [0.0, 0.0, 1.0, 0.0]]) }
45
+
46
+ assert_nothing_raised{ Axes.new([["1.0", "0.0", "0.0"], [0.0, 1.0, 0.0], [0.0, 0.0, 0.0]]) }
47
+ assert_nothing_raised{ Axes.new([[1, 0, 0], [0, 1, 0], [0, 0, 0]]) }
48
+ end
49
+
50
+ def test_self_dependent?
51
+ # Righthand
52
+ assert_equal( false, Axes.dependent?( [ @vec_x, @vec_y, @vec_z ] ) )
53
+ assert_equal( false, Axes.dependent?( [ @vec_y, @vec_z, @vec_x ] ) )
54
+ assert_equal( false, Axes.dependent?( [ @vec_z, @vec_x, @vec_y ] ) )
55
+
56
+ # Lefthand
57
+ assert_equal( false, Axes.dependent?( [ @vec_z, @vec_y, @vec_x ] ) )
58
+ assert_equal( false, Axes.dependent?( [ @vec_x, @vec_z, @vec_y ] ) )
59
+ assert_equal( false, Axes.dependent?( [ @vec_y, @vec_x, @vec_z ] ) )
60
+
61
+ # Including zero vector.
62
+ assert_equal( true , Axes.dependent?( [ @vec_0, @vec_y, @vec_z ] ) )
63
+ assert_equal( true , Axes.dependent?( [ @vec_0, @vec_z, @vec_x ] ) )
64
+ assert_equal( true , Axes.dependent?( [ @vec_0, @vec_x, @vec_y ] ) )
65
+
66
+ # One vector is on the plane of residual two vectors.
67
+ assert_equal( true , Axes.dependent?( [ @vec_x, @vec_y, @vec_1 ] ) )
68
+ end
69
+
70
+ def test_self_independent?
71
+ # Righthand
72
+ assert_equal( true , Axes.independent?( [ @vec_x, @vec_y, @vec_z ] ) )
73
+ assert_equal( true , Axes.independent?( [ @vec_y, @vec_z, @vec_x ] ) )
74
+ assert_equal( true , Axes.independent?( [ @vec_z, @vec_x, @vec_y ] ) )
75
+
76
+ # Lefthand
77
+ assert_equal( true , Axes.independent?( [ @vec_z, @vec_y, @vec_x ] ) )
78
+ assert_equal( true , Axes.independent?( [ @vec_x, @vec_z, @vec_y ] ) )
79
+ assert_equal( true , Axes.independent?( [ @vec_y, @vec_x, @vec_z ] ) )
80
+
81
+ # Including zero vector.
82
+ assert_equal( false, Axes.independent?( [ @vec_0, @vec_y, @vec_z ] ) )
83
+ assert_equal( false, Axes.independent?( [ @vec_0, @vec_z, @vec_x ] ) )
84
+ assert_equal( false, Axes.independent?( [ @vec_0, @vec_x, @vec_y ] ) )
85
+
86
+ # One vector is on the plane of residual two vectors.
87
+ assert_equal( false, Axes.independent?( [ @vec_x, @vec_y, @vec_1 ] ) )
88
+ end
89
+
90
+ def test_size
91
+ assert_equal( 1, @a10.size )
92
+ assert_equal( 2, @a20.size )
93
+ assert_equal( 3, @a30.size )
94
+ assert_equal( 4, @a40.size )
95
+ end
96
+
97
+ def test_equal
98
+ assert_equal( true , @a31 == Axes.new( [ [1.0, 0.0, 0.0], [0.0, 1.0, 0.0], [0.0, 0.0, 1.0] ] ))
99
+ assert_equal( false, @a31 == Axes.new( [ [0.5, 0.5, 0.0], [0.0, 0.5, 0.5], [0.5, 0.0, 0.5] ] ))
100
+ assert_equal( false, @a31 == Axes.new( [ [1.0, 1.0, 1.0], [0.0, 1.0, 1.0], [0.0, 0.0, 1.0] ] ))
101
+
102
+ assert_equal( false, @a32 == Axes.new( [ [1.0, 0.0, 0.0], [0.0, 1.0, 0.0], [0.0, 0.0, 1.0] ] ))
103
+ assert_equal( true , @a32 == Axes.new( [ [0.5, 0.5, 0.0], [0.5, 0.0, 0.5], [0.0, 0.5, 0.5] ] ))
104
+ assert_equal( false, @a32 == Axes.new( [ [1.0, 1.0, 1.0], [0.0, 1.0, 1.0], [0.0, 0.0, 1.0] ] ))
105
+
106
+ assert_equal( false, @a35 == Axes.new( [ [1.0, 0.0, 0.0], [0.0, 1.0, 0.0], [0.0, 0.0, 1.0] ] ))
107
+ assert_equal( false, @a35 == Axes.new( [ [0.5, 0.5, 0.0], [0.0, 0.5, 0.5], [0.5, 0.0, 0.5] ] ))
108
+ assert_equal( true , @a35 == Axes.new( [ [1.0, 1.0, 1.0], [0.0, 1.0, 1.0], [0.0, 0.0, 1.0] ] ))
109
+ end
110
+
111
+ def test_dependent?
112
+ assert_equal( false, @a31.dependent? )
113
+ assert_equal( false, @a32.dependent? )
114
+ assert_equal( true , @a33.dependent? )
115
+ assert_equal( true , @a34.dependent? )
116
+ end
117
+
118
+ def test_independent?
119
+ assert_equal( true , @a31.independent? )
120
+ assert_equal( true , @a32.independent? )
121
+ assert_equal( false, @a33.independent? )
122
+ assert_equal( false, @a34.independent? )
123
+ end
124
+
125
+ def test_to_a
126
+ assert_equal( Array, @a31.to_a.class )
127
+ assert_equal( Array, @a31.to_a[0].class )
128
+ assert_equal( Array, @a31.to_a[1].class )
129
+ assert_equal( Array, @a31.to_a[2].class )
130
+ assert_in_delta( 1.0, @a31.to_a[0][0], $tolerance )
131
+ assert_in_delta( 0.0, @a31.to_a[0][1], $tolerance )
132
+ assert_in_delta( 0.0, @a31.to_a[0][2], $tolerance )
133
+ assert_in_delta( 0.0, @a31.to_a[1][0], $tolerance )
134
+ assert_in_delta( 1.0, @a31.to_a[1][1], $tolerance )
135
+ assert_in_delta( 0.0, @a31.to_a[1][2], $tolerance )
136
+ assert_in_delta( 0.0, @a31.to_a[2][0], $tolerance )
137
+ assert_in_delta( 0.0, @a31.to_a[2][1], $tolerance )
138
+ assert_in_delta( 1.0, @a31.to_a[2][2], $tolerance )
139
+
140
+ assert_equal( Array, @a35.to_a.class )
141
+ assert_equal( Array, @a35.to_a[0].class )
142
+ assert_equal( Array, @a35.to_a[1].class )
143
+ assert_equal( Array, @a35.to_a[2].class )
144
+ assert_in_delta( 1.0, @a35.to_a[0][0], $tolerance )
145
+ assert_in_delta( 1.0, @a35.to_a[0][1], $tolerance )
146
+ assert_in_delta( 1.0, @a35.to_a[0][2], $tolerance )
147
+ assert_in_delta( 0.0, @a35.to_a[1][0], $tolerance )
148
+ assert_in_delta( 1.0, @a35.to_a[1][1], $tolerance )
149
+ assert_in_delta( 1.0, @a35.to_a[1][2], $tolerance )
150
+ assert_in_delta( 0.0, @a35.to_a[2][0], $tolerance )
151
+ assert_in_delta( 0.0, @a35.to_a[2][1], $tolerance )
152
+ assert_in_delta( 1.0, @a35.to_a[2][2], $tolerance )
153
+ end
154
+
155
+ def test_paren # []
156
+ assert_equal( Vector, @a31[0].class )
157
+ assert_equal( Vector, @a31[1].class )
158
+ assert_equal( Vector, @a31[2].class )
159
+ assert_in_delta( 1.0, @a31[0][0], $tolerance )
160
+ assert_in_delta( 0.0, @a31[0][1], $tolerance )
161
+ assert_in_delta( 0.0, @a31[0][2], $tolerance )
162
+ assert_in_delta( 0.0, @a31[1][0], $tolerance )
163
+ assert_in_delta( 1.0, @a31[1][1], $tolerance )
164
+ assert_in_delta( 0.0, @a31[1][2], $tolerance )
165
+ assert_in_delta( 0.0, @a31[2][0], $tolerance )
166
+ assert_in_delta( 0.0, @a31[2][1], $tolerance )
167
+ assert_in_delta( 1.0, @a31[2][2], $tolerance )
168
+ end
169
+
170
+ def test_each
171
+ i = 0
172
+ @a31.each { |vec|
173
+ assert_equal( @a31[i], vec )
174
+ i += 1
175
+ }
176
+
177
+ assert_raise( NoMethodError ) { @a31.map{ |vec| vec * 2.0 } }
178
+ end
179
+
180
+ def test_to_a
181
+ t = @a10.to_a
182
+ assert_equal(Array, t.class)
183
+ assert_equal([[1.0]], t)
184
+
185
+ t = @a20.to_a
186
+ assert_equal(Array, t.class)
187
+ assert_equal([[1.0, 0.0], [0.0, 1.0]], t)
188
+
189
+ t = @a30.to_a
190
+ assert_equal(Array, t.class)
191
+ assert_equal([[1.0, 0.0, 0.0], [0.0, 1.0, 0.0], [0.0, 0.0, 1.0]] , t)
192
+
193
+ t = @a40.to_a
194
+ assert_equal(Array, t.class)
195
+ assert_equal( [
196
+ [1.0, 0.0, 0.0, 0.0],
197
+ [0.0, 1.0, 0.0, 0.0],
198
+ [0.0, 0.0, 1.0, 0.0],
199
+ [0.0, 0.0, 0.0, 1.0]
200
+ ], t
201
+ )
202
+
203
+ t = @a32.to_a
204
+ assert_equal(Array, t.class)
205
+ assert_equal( [ [0.5, 0.5, 0.0], [0.5, 0.0, 0.5], [0.0, 0.5, 0.5] ] , t)
206
+ end
208
207
  end
209
208