mageo 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES +6 -0
- data/Gemfile +4 -4
- data/Rakefile +2 -2
- data/VERSION +1 -1
- data/lib/mageo.rb +20 -0
- data/lib/mageo/axes.rb +1 -3
- data/lib/mageo/cylinder.rb +4 -6
- data/lib/mageo/octahedron.rb +2 -8
- data/lib/mageo/polar2d.rb +5 -8
- data/lib/mageo/polar3d.rb +2 -5
- data/lib/mageo/polyhedron.rb +14 -14
- data/lib/mageo/segment.rb +8 -10
- data/lib/mageo/sphere.rb +2 -5
- data/lib/mageo/tetrahedron.rb +2 -7
- data/lib/mageo/triangle.rb +18 -23
- data/lib/mageo/vector.rb +3 -5
- data/lib/mageo/vector3d.rb +28 -35
- data/lib/mageo/vector3dinternal.rb +14 -14
- data/mageo.gemspec +13 -16
- data/test/test_axes.rb +51 -51
- data/test/test_cylinder.rb +7 -6
- data/test/test_octahedron.rb +59 -60
- data/test/test_polar2d.rb +29 -27
- data/test/test_polar3d.rb +24 -23
- data/test/test_polyhedron.rb +4 -3
- data/test/test_segment.rb +32 -31
- data/test/test_sphere.rb +6 -5
- data/test/test_tetrahedron.rb +58 -56
- data/test/test_triangle.rb +124 -122
- data/test/test_vector.rb +8 -6
- data/test/test_vector3d.rb +168 -166
- data/test/test_vector3dinternal.rb +35 -33
- metadata +20 -31
data/lib/mageo/vector.rb
CHANGED
@@ -1,18 +1,16 @@
|
|
1
1
|
#! /usr/bin/ruby
|
2
2
|
|
3
|
-
require "matrix"
|
4
|
-
|
5
3
|
class Vector
|
6
4
|
#include Math
|
7
|
-
class
|
5
|
+
class ZeroOperationError < Exception; end
|
8
6
|
class SizeError < Exception; end
|
9
7
|
|
10
8
|
# Get a unit vector.
|
11
9
|
def unit_vector
|
12
10
|
len = self.r
|
13
|
-
raise Vector::
|
11
|
+
raise Vector::ZeroOperationError if (len == 0)
|
14
12
|
self * (1/len)
|
15
|
-
# Vector3D.new(@x*(1.0/len), @y*(1.0/len), @z*(1.0/len))
|
13
|
+
# Mageo::Vector3D.new(@x*(1.0/len), @y*(1.0/len), @z*(1.0/len))
|
16
14
|
end
|
17
15
|
|
18
16
|
def floor
|
data/lib/mageo/vector3d.rb
CHANGED
@@ -1,12 +1,5 @@
|
|
1
1
|
#! /usr/bin/ruby
|
2
2
|
|
3
|
-
# written by Ippei KISHIDA
|
4
|
-
#
|
5
|
-
require "matrix"
|
6
|
-
require "mageo/polar2d.rb"
|
7
|
-
require "mageo/polar3d.rb"
|
8
|
-
require "mageo/axes.rb"
|
9
|
-
require "mageo/vector.rb"
|
10
3
|
require "rubygems"
|
11
4
|
gem "malge"
|
12
5
|
require "malge.rb"
|
@@ -15,18 +8,18 @@ require "malge.rb"
|
|
15
8
|
|
16
9
|
# Open class to add "to_v3d" method.
|
17
10
|
class Array
|
18
|
-
# Convert Array to Vector3D
|
11
|
+
# Convert Array to Mageo::Vector3D
|
19
12
|
def to_v3d
|
20
|
-
Vector3D[*self]
|
21
|
-
#要素数チェックは Vector3D.[] 側でやっている。
|
13
|
+
Mageo::Vector3D[*self]
|
14
|
+
#要素数チェックは Mageo::Vector3D.[] 側でやっている。
|
22
15
|
end
|
23
16
|
end
|
24
17
|
|
25
18
|
class Vector
|
26
|
-
# Return a new instance converted to Vector3D class.
|
19
|
+
# Return a new instance converted to Mageo::Vector3D class.
|
27
20
|
def to_v3d
|
28
|
-
Vector3D[*self]
|
29
|
-
#要素数チェックは Vector3D.[] 側でやっている。
|
21
|
+
Mageo::Vector3D[*self]
|
22
|
+
#要素数チェックは Mageo::Vector3D.[] 側でやっている。
|
30
23
|
end
|
31
24
|
end
|
32
25
|
|
@@ -35,16 +28,16 @@ end
|
|
35
28
|
# This class provide exterior_product method and others, which is not included
|
36
29
|
# in native Vector class.
|
37
30
|
# This class is constructed under the assumption in the Cartesian coordinate.
|
38
|
-
# If you want to be in an internal coordinate, you can use Math/Vector3DInternal.rb .
|
31
|
+
# If you want to be in an internal coordinate, you can use Math/Mageo::Vector3DInternal.rb .
|
39
32
|
#
|
40
33
|
# Memo:
|
41
|
-
# Vector3DInternal との対比として、Vector3DCartesian という名前にすることも考えたが、
|
34
|
+
# Mageo::Vector3DInternal との対比として、Vector3DCartesian という名前にすることも考えたが、
|
42
35
|
# 長くなるし、普通直交座標で考えるよね、と。
|
43
36
|
#
|
44
37
|
# インスタンス生成の時点で要素数をチェックし、要素の追加削除を禁止しているので
|
45
38
|
# 要素数は常に3であることが保証されている。
|
46
39
|
#
|
47
|
-
class Vector3D < Vector
|
40
|
+
class Mageo::Vector3D < Vector
|
48
41
|
|
49
42
|
class TypeError < Exception; end
|
50
43
|
class ZeroOperation < Exception; end
|
@@ -60,7 +53,7 @@ class Vector3D < Vector
|
|
60
53
|
# Get the exterior product.
|
61
54
|
def self.exterior_product(vec0, vec1)
|
62
55
|
[vec0, vec1].each_with_index do |vec, index|
|
63
|
-
unless (vec.class == Vector3D)
|
56
|
+
unless (vec.class == Mageo::Vector3D)
|
64
57
|
raise TypeError, "Vector #{index}, #{vec.inspect}."
|
65
58
|
end
|
66
59
|
end
|
@@ -83,7 +76,7 @@ class Vector3D < Vector
|
|
83
76
|
# Get the scalar triple product.
|
84
77
|
def self.scalar_triple_product(vec0, vec1, vec2)
|
85
78
|
[vec0, vec1, vec2].each_with_index do |vec, index|
|
86
|
-
raise TypeError, "#{index}th vector: #{vec.inspect}" unless (vec.class == Vector3D)
|
79
|
+
raise TypeError, "#{index}th vector: #{vec.inspect}" unless (vec.class == Mageo::Vector3D)
|
87
80
|
end
|
88
81
|
|
89
82
|
vec0.inner_product(vec1.exterior_product(vec2))
|
@@ -92,7 +85,7 @@ class Vector3D < Vector
|
|
92
85
|
# Get the angle with radian between self and other vectors.
|
93
86
|
def self.angle_radian(vec0, vec1)
|
94
87
|
[vec0, vec1].each_with_index do |vec, index|
|
95
|
-
raise TypeError, "#{index}th vector: #{vec.inspect}" unless (vec.class == Vector3D)
|
88
|
+
raise TypeError, "#{index}th vector: #{vec.inspect}" unless (vec.class == Mageo::Vector3D)
|
96
89
|
raise ZeroOperation, "#{index}th vector: #{vec.inspect}" if (vec.r == 0.0)
|
97
90
|
end
|
98
91
|
|
@@ -102,7 +95,7 @@ class Vector3D < Vector
|
|
102
95
|
# Get the angle with degree between self and other vectors.
|
103
96
|
def self.angle_degree(vec0, vec1)
|
104
97
|
[vec0, vec1].each_with_index do |vec, index|
|
105
|
-
raise TypeError, "#{index}th vector: #{vec.inspect}" unless (vec.class == Vector3D)
|
98
|
+
raise TypeError, "#{index}th vector: #{vec.inspect}" unless (vec.class == Mageo::Vector3D)
|
106
99
|
raise ZeroOperation, "#{index}th vector: #{vec.inspect}" if (vec.r == 0.0)
|
107
100
|
end
|
108
101
|
|
@@ -123,33 +116,33 @@ class Vector3D < Vector
|
|
123
116
|
|
124
117
|
|
125
118
|
# ベクトルが等しいかチェック。
|
126
|
-
# other として Vector3D クラス以外のインスタンス渡すと Vector3D::TypeError。
|
119
|
+
# other として Mageo::Vector3D クラス以外のインスタンス渡すと Vector3D::TypeError。
|
127
120
|
# 両者の差分ベクトルの長さが tolerance 以下という判定になる。
|
128
121
|
def equal_in_delta?(other, tolerance = 0.0)
|
129
|
-
raise TypeError if (other.class != Vector3D)
|
122
|
+
raise TypeError if (other.class != Mageo::Vector3D)
|
130
123
|
return (other - self).r <= tolerance
|
131
124
|
end
|
132
125
|
|
133
126
|
# Vectorクラスで用意されているメソッドは Vectorクラスインスタンスを返すようになっているので、
|
134
|
-
# Vector3D クラスインスタンスを返すようにした + メソッド。
|
127
|
+
# Mageo::Vector3D クラスインスタンスを返すようにした + メソッド。
|
135
128
|
def +(vec)
|
136
|
-
unless (vec.class == Vector3D)
|
129
|
+
unless (vec.class == Mageo::Vector3D)
|
137
130
|
raise TypeError, "#{vec.inspect}."
|
138
131
|
end
|
139
132
|
super(vec).to_v3d
|
140
133
|
end
|
141
134
|
|
142
135
|
# Vectorクラスで用意されているメソッドは Vectorクラスインスタンスを返すようになっているので、
|
143
|
-
# Vector3D クラスインスタンスを返すようにした - メソッド。
|
136
|
+
# Mageo::Vector3D クラスインスタンスを返すようにした - メソッド。
|
144
137
|
def -(vec)
|
145
|
-
unless (vec.class == Vector3D)
|
138
|
+
unless (vec.class == Mageo::Vector3D)
|
146
139
|
raise TypeError, "#{vec.inspect}."
|
147
140
|
end
|
148
141
|
super(vec).to_v3d
|
149
142
|
end
|
150
143
|
|
151
144
|
# Vectorクラスで用意されているメソッドは Vectorクラスインスタンスを返すようになっているので、
|
152
|
-
# Vector3D クラスインスタンスを返すようにした * メソッド。
|
145
|
+
# Mageo::Vector3D クラスインスタンスを返すようにした * メソッド。
|
153
146
|
# Argument 'val' must have :to_f method.
|
154
147
|
def *(val)
|
155
148
|
#raise TypeError if (val.class != Float)
|
@@ -158,18 +151,18 @@ class Vector3D < Vector
|
|
158
151
|
end
|
159
152
|
|
160
153
|
# Vectorクラスで用意されているメソッドは Vectorクラスインスタンスを返すようになっているので、
|
161
|
-
# Vector3D クラスインスタンスを返すようにした clone メソッド。
|
154
|
+
# Mageo::Vector3D クラスインスタンスを返すようにした clone メソッド。
|
162
155
|
def clone
|
163
156
|
super().to_v3d
|
164
157
|
end
|
165
158
|
|
166
|
-
# Convert to Vector3DInternal. Non-destructive.
|
159
|
+
# Convert to Mageo::Vector3DInternal. Non-destructive.
|
167
160
|
def to_v3di(axes)
|
168
|
-
#pp axes.is_a?(Axes)
|
169
|
-
raise TypeError unless axes.is_a?(Axes)
|
161
|
+
#pp axes.is_a?(Mageo::Axes)
|
162
|
+
raise TypeError unless axes.is_a?(Mageo::Axes)
|
170
163
|
|
171
164
|
axes = axes.to_a
|
172
|
-
Vector3DInternal[ *(Malge::SimultaneousEquations.cramer(axes.transpose, self)) ]
|
165
|
+
Mageo::Vector3DInternal[ *(Malge::SimultaneousEquations.cramer(axes.transpose, self)) ]
|
173
166
|
end
|
174
167
|
|
175
168
|
#Return size, always 3.
|
@@ -196,17 +189,17 @@ class Vector3D < Vector
|
|
196
189
|
self.class.angle_degree(self, vec)
|
197
190
|
end
|
198
191
|
|
199
|
-
#3次元極座標への変換した Polar3D インスタンスを返す。
|
192
|
+
#3次元極座標への変換した Mageo::Polar3D インスタンスを返す。
|
200
193
|
def to_p3d
|
201
194
|
r = self.r
|
202
195
|
if r == 0.0
|
203
196
|
theta = 0.0
|
204
197
|
phi = 0.0
|
205
198
|
else
|
206
|
-
theta = Polar2D.minimum_radian(Math::acos(self[2] / r))
|
199
|
+
theta = Mageo::Polar2D.minimum_radian(Math::acos(self[2] / r))
|
207
200
|
phi = Vector[ self[0], self[1] ].to_p2d.theta
|
208
201
|
end
|
209
|
-
Polar3D.new(r, theta, phi)
|
202
|
+
Mageo::Polar3D.new(r, theta, phi)
|
210
203
|
end
|
211
204
|
|
212
205
|
#x, y, z 軸のいずれかで self を回転する。破壊的。
|
@@ -1,8 +1,8 @@
|
|
1
|
-
require 'mageo/vector3d.rb'
|
1
|
+
#require 'mageo/vector3d.rb'
|
2
2
|
|
3
3
|
class Array
|
4
4
|
def to_v3di
|
5
|
-
Vector3DInternal[ *self ]
|
5
|
+
Mageo::Vector3DInternal[ *self ]
|
6
6
|
end
|
7
7
|
end
|
8
8
|
|
@@ -11,16 +11,16 @@ end
|
|
11
11
|
# (直交座標と間違えて)内部座標で内積を求めるなど誤った演算を例外で止めるのが目的。
|
12
12
|
# 座標軸の情報は自身では持たない。
|
13
13
|
# Actually, this class is very similar to Array class, except for +, -, and * methods.
|
14
|
-
# Vector, Vector3D との混在計算は例外を発生。
|
14
|
+
# Vector, Mageo::Vector3D との混在計算は例外を発生。
|
15
15
|
#
|
16
16
|
# 軸の情報は持たない。
|
17
17
|
# 軸に関係ない抽象的な内部座標について議論することもありうるし、
|
18
18
|
# 軸情報が必要なのは to_v3d メソッドくらいなので。
|
19
|
-
class Vector3DInternal < Vector3D
|
19
|
+
class Mageo::Vector3DInternal < Mageo::Vector3D
|
20
20
|
class RangeError < Exception; end
|
21
21
|
class TypeError < Exception; end
|
22
22
|
|
23
|
-
#要素数3以外では例外 Vector3DInternalSizeError を発生。
|
23
|
+
#要素数3以外では例外 Mageo::Vector3DInternalSizeError を発生。
|
24
24
|
def self.[]( *args )
|
25
25
|
raise RangeError unless args.size == 3
|
26
26
|
super *args
|
@@ -36,7 +36,7 @@ class Vector3DInternal < Vector3D
|
|
36
36
|
return self
|
37
37
|
end
|
38
38
|
|
39
|
-
# Convert to Vector3D. Non-destructive.
|
39
|
+
# Convert to Mageo::Vector3D. Non-destructive.
|
40
40
|
def to_v3d( axes )
|
41
41
|
result = [ 0.0, 0.0, 0.0 ]
|
42
42
|
3.times do |i|
|
@@ -44,7 +44,7 @@ class Vector3DInternal < Vector3D
|
|
44
44
|
result[i] += ( self[j] * axes[j][i] )
|
45
45
|
end
|
46
46
|
end
|
47
|
-
Vector3D[ *result ]
|
47
|
+
Mageo::Vector3D[ *result ]
|
48
48
|
end
|
49
49
|
|
50
50
|
## Return an array converted from self.
|
@@ -62,13 +62,13 @@ class Vector3DInternal < Vector3D
|
|
62
62
|
# return true
|
63
63
|
#end
|
64
64
|
|
65
|
-
#0〜2 以外の要素にアクセスしようとすると例外 Vector3DInternal::RangeError を発生。
|
65
|
+
#0〜2 以外の要素にアクセスしようとすると例外 Mageo::Vector3DInternal::RangeError を発生。
|
66
66
|
def []( index )
|
67
67
|
raise RangeError if ( index < 0 || 2 < index )
|
68
68
|
super index
|
69
69
|
end
|
70
70
|
|
71
|
-
#0〜2 以外の要素にアクセスしようとすると例外 Vector3DInternal::RangeError を発生。
|
71
|
+
#0〜2 以外の要素にアクセスしようとすると例外 Mageo::Vector3DInternal::RangeError を発生。
|
72
72
|
def []=( index, val )
|
73
73
|
raise RangeError if ( index < 0 || 2 < index )
|
74
74
|
super index, val
|
@@ -76,11 +76,11 @@ class Vector3DInternal < Vector3D
|
|
76
76
|
|
77
77
|
#ベクトルとしての加算
|
78
78
|
def +(vec)
|
79
|
-
unless vec.class == Vector3DInternal
|
79
|
+
unless vec.class == Mageo::Vector3DInternal
|
80
80
|
raise TypeError,
|
81
81
|
"Argument: #{vec.inspect}, #{vec.class}."
|
82
82
|
end
|
83
|
-
result = Vector3DInternal[0.0, 0.0, 0.0]
|
83
|
+
result = Mageo::Vector3DInternal[0.0, 0.0, 0.0]
|
84
84
|
3.times do |i|
|
85
85
|
result[ i ] = (self[ i ] + vec[ i ])
|
86
86
|
end
|
@@ -89,11 +89,11 @@ class Vector3DInternal < Vector3D
|
|
89
89
|
|
90
90
|
#ベクトルとしての減算
|
91
91
|
def -( vec )
|
92
|
-
unless vec.class == Vector3DInternal
|
92
|
+
unless vec.class == Mageo::Vector3DInternal
|
93
93
|
raise TypeError,
|
94
94
|
"Argument: #{vec.inspect}, #{vec.class}."
|
95
95
|
end
|
96
|
-
result = Vector3DInternal[0.0, 0.0, 0.0]
|
96
|
+
result = Mageo::Vector3DInternal[0.0, 0.0, 0.0]
|
97
97
|
3.times do |i|
|
98
98
|
result[ i ] = (self[ i ] - vec[ i ])
|
99
99
|
end
|
@@ -102,7 +102,7 @@ class Vector3DInternal < Vector3D
|
|
102
102
|
|
103
103
|
#ベクトルとしての乗算
|
104
104
|
def *( val )
|
105
|
-
result = Vector3DInternal[0.0, 0.0, 0.0]
|
105
|
+
result = Mageo::Vector3DInternal[0.0, 0.0, 0.0]
|
106
106
|
3.times do |i|
|
107
107
|
result[ i ] = ( self[ i ] * val )
|
108
108
|
end
|
data/mageo.gemspec
CHANGED
@@ -5,12 +5,12 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "mageo"
|
8
|
-
s.version = "0.0.
|
8
|
+
s.version = "0.0.2"
|
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 = "2013-
|
13
|
-
s.description = "MAth GEOmetry library to deal with 2 and 3
|
12
|
+
s.date = "2013-04-18"
|
13
|
+
s.description = "MAth GEOmetry library to deal with 2 and 3 dimensional spaces.\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 = [
|
16
16
|
"LICENSE.txt",
|
@@ -58,34 +58,31 @@ Gem::Specification.new do |s|
|
|
58
58
|
s.licenses = ["MIT"]
|
59
59
|
s.require_paths = ["lib"]
|
60
60
|
s.rubygems_version = "1.8.11"
|
61
|
-
s.summary = "MAth GEOmetry library to deal with 2 and 3
|
61
|
+
s.summary = "MAth GEOmetry library to deal with 2 and 3 dimensional spaces."
|
62
62
|
|
63
63
|
if s.respond_to? :specification_version then
|
64
64
|
s.specification_version = 3
|
65
65
|
|
66
66
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
67
|
-
s.add_development_dependency(%q<builtinextension>, [">= 0"])
|
68
|
-
s.add_development_dependency(%q<bundler>, ["~> 1.
|
67
|
+
s.add_development_dependency(%q<builtinextension>, [">= 0.1.0"])
|
68
|
+
s.add_development_dependency(%q<bundler>, ["~> 1.3.5"])
|
69
69
|
s.add_development_dependency(%q<jeweler>, ["~> 1.8.3"])
|
70
|
-
s.add_development_dependency(%q<malge>, [">= 0.0.
|
71
|
-
s.add_development_dependency(%q<psych>, [">= 0"])
|
70
|
+
s.add_development_dependency(%q<malge>, [">= 0.0.8"])
|
72
71
|
s.add_development_dependency(%q<rdoc>, ["~> 3.12"])
|
73
72
|
s.add_development_dependency(%q<simplecov>, [">= 0"])
|
74
73
|
else
|
75
|
-
s.add_dependency(%q<builtinextension>, [">= 0"])
|
76
|
-
s.add_dependency(%q<bundler>, ["~> 1.
|
74
|
+
s.add_dependency(%q<builtinextension>, [">= 0.1.0"])
|
75
|
+
s.add_dependency(%q<bundler>, ["~> 1.3.5"])
|
77
76
|
s.add_dependency(%q<jeweler>, ["~> 1.8.3"])
|
78
|
-
s.add_dependency(%q<malge>, [">= 0.0.
|
79
|
-
s.add_dependency(%q<psych>, [">= 0"])
|
77
|
+
s.add_dependency(%q<malge>, [">= 0.0.8"])
|
80
78
|
s.add_dependency(%q<rdoc>, ["~> 3.12"])
|
81
79
|
s.add_dependency(%q<simplecov>, [">= 0"])
|
82
80
|
end
|
83
81
|
else
|
84
|
-
s.add_dependency(%q<builtinextension>, [">= 0"])
|
85
|
-
s.add_dependency(%q<bundler>, ["~> 1.
|
82
|
+
s.add_dependency(%q<builtinextension>, [">= 0.1.0"])
|
83
|
+
s.add_dependency(%q<bundler>, ["~> 1.3.5"])
|
86
84
|
s.add_dependency(%q<jeweler>, ["~> 1.8.3"])
|
87
|
-
s.add_dependency(%q<malge>, [">= 0.0.
|
88
|
-
s.add_dependency(%q<psych>, [">= 0"])
|
85
|
+
s.add_dependency(%q<malge>, [">= 0.0.8"])
|
89
86
|
s.add_dependency(%q<rdoc>, ["~> 3.12"])
|
90
87
|
s.add_dependency(%q<simplecov>, [">= 0"])
|
91
88
|
end
|
data/test/test_axes.rb
CHANGED
@@ -2,17 +2,17 @@
|
|
2
2
|
# coding: utf-8
|
3
3
|
|
4
4
|
require "helper"
|
5
|
-
require "test/unit"
|
6
|
-
require "mageo/axes.rb"
|
5
|
+
#require "test/unit"
|
6
|
+
#require "mageo/axes.rb"
|
7
7
|
|
8
8
|
class TC_Axes < Test::Unit::TestCase
|
9
9
|
$tolerance = 1.0 * 10.0**(-10)
|
10
10
|
|
11
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([
|
12
|
+
@a10 = Mageo::Axes.new([[1.0]])
|
13
|
+
@a20 = Mageo::Axes.new([[1.0, 0.0], [0.0, 1.0]])
|
14
|
+
@a30 = Mageo::Axes.new([[1.0, 0.0, 0.0], [0.0, 1.0, 0.0], [0.0, 0.0, 1.0]])
|
15
|
+
@a40 = Mageo::Axes.new([
|
16
16
|
[1.0, 0.0, 0.0, 0.0],
|
17
17
|
[0.0, 1.0, 0.0, 0.0],
|
18
18
|
[0.0, 0.0, 1.0, 0.0],
|
@@ -20,12 +20,12 @@ class TC_Axes < Test::Unit::TestCase
|
|
20
20
|
]
|
21
21
|
)
|
22
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] ] )
|
23
|
+
@a31 = Mageo::Axes.new( [ [1.0, 0.0, 0.0], [0.0, 1.0, 0.0], [0.0, 0.0, 1.0] ] )
|
24
|
+
@a32 = Mageo::Axes.new( [ [0.5, 0.5, 0.0], [0.5, 0.0, 0.5], [0.0, 0.5, 0.5] ] )
|
25
|
+
@a33 = Mageo::Axes.new( [ [1.0, 0.0, 0.0], [1.0, 0.0, 0.0], [0.0, 0.0, 1.0] ] )
|
26
|
+
@a34 = Mageo::Axes.new( [ [0.5, 0.5, 0.0], [0.5, 0.0, 0.0], [0.0, 0.5, 0.0] ] )
|
27
|
+
@a35 = Mageo::Axes.new( [ [1.0, 1.0, 1.0], [0.0, 1.0, 1.0], [0.0, 0.0, 1.0] ] )
|
28
|
+
@a36 = Mageo::Axes.new( [ [1.0, 1.0, 1.0], [0.0,-1.0,-1.0], [0.0, 0.0, 1.0] ] )
|
29
29
|
|
30
30
|
@vec_x = Vector[ 1.0, 0.0, 0.0 ]
|
31
31
|
@vec_y = Vector[ 0.0, 1.0, 0.0 ]
|
@@ -35,56 +35,56 @@ class TC_Axes < Test::Unit::TestCase
|
|
35
35
|
end
|
36
36
|
|
37
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]]) }
|
38
|
+
assert_raise(Mageo::Axes::InitializeError) { Mageo::Axes.new([[]]) }
|
39
|
+
assert_raise(Mageo::Axes::InitializeError) { Mageo::Axes.new([[1.0, 0.0, 0.0], [0.0, 1.0, 0.0]]) }
|
40
|
+
assert_raise(Mageo::Axes::InitializeError) { Mageo::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(Mageo::Axes::InitializeError) { Mageo::Axes.new([[1.0, 0.0], [0.0, 1.0, 0.0], [0.0, 0.0, 1.0]]) }
|
42
|
+
assert_raise(Mageo::Axes::InitializeError) { Mageo::Axes.new([[1.0, 0.0, 0.0], [0.0, 1.0], [0.0, 0.0, 1.0]]) }
|
43
|
+
assert_raise(Mageo::Axes::InitializeError) { Mageo::Axes.new([[1.0, 0.0, 0.0], [0.0, 1.0, 0.0], [0.0, 0.0]]) }
|
44
|
+
assert_raise(Mageo::Axes::InitializeError) { Mageo::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{ Mageo::Axes.new([["1.0", "0.0", "0.0"], [0.0, 1.0, 0.0], [0.0, 0.0, 0.0]]) }
|
47
|
+
assert_nothing_raised{ Mageo::Axes.new([[1, 0, 0], [0, 1, 0], [0, 0, 0]]) }
|
48
48
|
end
|
49
49
|
|
50
50
|
def test_self_dependent?
|
51
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 ] ) )
|
52
|
+
assert_equal( false, Mageo::Axes.dependent?( [ @vec_x, @vec_y, @vec_z ] ) )
|
53
|
+
assert_equal( false, Mageo::Axes.dependent?( [ @vec_y, @vec_z, @vec_x ] ) )
|
54
|
+
assert_equal( false, Mageo::Axes.dependent?( [ @vec_z, @vec_x, @vec_y ] ) )
|
55
55
|
|
56
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 ] ) )
|
57
|
+
assert_equal( false, Mageo::Axes.dependent?( [ @vec_z, @vec_y, @vec_x ] ) )
|
58
|
+
assert_equal( false, Mageo::Axes.dependent?( [ @vec_x, @vec_z, @vec_y ] ) )
|
59
|
+
assert_equal( false, Mageo::Axes.dependent?( [ @vec_y, @vec_x, @vec_z ] ) )
|
60
60
|
|
61
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 ] ) )
|
62
|
+
assert_equal( true , Mageo::Axes.dependent?( [ @vec_0, @vec_y, @vec_z ] ) )
|
63
|
+
assert_equal( true , Mageo::Axes.dependent?( [ @vec_0, @vec_z, @vec_x ] ) )
|
64
|
+
assert_equal( true , Mageo::Axes.dependent?( [ @vec_0, @vec_x, @vec_y ] ) )
|
65
65
|
|
66
66
|
# One vector is on the plane of residual two vectors.
|
67
|
-
assert_equal( true , Axes.dependent?( [ @vec_x, @vec_y, @vec_1 ] ) )
|
67
|
+
assert_equal( true , Mageo::Axes.dependent?( [ @vec_x, @vec_y, @vec_1 ] ) )
|
68
68
|
end
|
69
69
|
|
70
70
|
def test_self_independent?
|
71
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 ] ) )
|
72
|
+
assert_equal( true , Mageo::Axes.independent?( [ @vec_x, @vec_y, @vec_z ] ) )
|
73
|
+
assert_equal( true , Mageo::Axes.independent?( [ @vec_y, @vec_z, @vec_x ] ) )
|
74
|
+
assert_equal( true , Mageo::Axes.independent?( [ @vec_z, @vec_x, @vec_y ] ) )
|
75
75
|
|
76
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 ] ) )
|
77
|
+
assert_equal( true , Mageo::Axes.independent?( [ @vec_z, @vec_y, @vec_x ] ) )
|
78
|
+
assert_equal( true , Mageo::Axes.independent?( [ @vec_x, @vec_z, @vec_y ] ) )
|
79
|
+
assert_equal( true , Mageo::Axes.independent?( [ @vec_y, @vec_x, @vec_z ] ) )
|
80
80
|
|
81
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 ] ) )
|
82
|
+
assert_equal( false, Mageo::Axes.independent?( [ @vec_0, @vec_y, @vec_z ] ) )
|
83
|
+
assert_equal( false, Mageo::Axes.independent?( [ @vec_0, @vec_z, @vec_x ] ) )
|
84
|
+
assert_equal( false, Mageo::Axes.independent?( [ @vec_0, @vec_x, @vec_y ] ) )
|
85
85
|
|
86
86
|
# One vector is on the plane of residual two vectors.
|
87
|
-
assert_equal( false, Axes.independent?( [ @vec_x, @vec_y, @vec_1 ] ) )
|
87
|
+
assert_equal( false, Mageo::Axes.independent?( [ @vec_x, @vec_y, @vec_1 ] ) )
|
88
88
|
end
|
89
89
|
|
90
90
|
def test_size
|
@@ -95,17 +95,17 @@ class TC_Axes < Test::Unit::TestCase
|
|
95
95
|
end
|
96
96
|
|
97
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] ] ))
|
98
|
+
assert_equal( true , @a31 == Mageo::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 == Mageo::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 == Mageo::Axes.new( [ [1.0, 1.0, 1.0], [0.0, 1.0, 1.0], [0.0, 0.0, 1.0] ] ))
|
101
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] ] ))
|
102
|
+
assert_equal( false, @a32 == Mageo::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 == Mageo::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 == Mageo::Axes.new( [ [1.0, 1.0, 1.0], [0.0, 1.0, 1.0], [0.0, 0.0, 1.0] ] ))
|
105
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] ] ))
|
106
|
+
assert_equal( false, @a35 == Mageo::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 == Mageo::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 == Mageo::Axes.new( [ [1.0, 1.0, 1.0], [0.0, 1.0, 1.0], [0.0, 0.0, 1.0] ] ))
|
109
109
|
end
|
110
110
|
|
111
111
|
def test_dependent?
|