gmath3D 0.2.2 → 0.2.3
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION +1 -1
- data/gmath3D.gemspec +4 -2
- data/lib/box.rb +13 -0
- data/lib/ellipse.rb +11 -0
- data/lib/finite_line.rb +19 -1
- data/lib/gmath3D.rb +2 -0
- data/lib/polyline.rb +2 -0
- data/lib/rectangle.rb +2 -0
- data/lib/tri_mesh.rb +3 -1
- data/lib/triangle.rb +3 -1
- data/lib/util.rb +10 -1
- data/lib/vector3.rb +24 -0
- data/test/test_box.rb +24 -0
- data/test/test_ellipse.rb +55 -0
- data/test/test_finite_line.rb +21 -0
- data/test/test_polyline.rb +7 -0
- data/test/test_rectangle.rb +9 -0
- data/test/test_tri_mesh.rb +9 -0
- data/test/test_triangle.rb +9 -0
- data/test/test_vector3.rb +39 -1
- metadata +9 -7
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.2.
|
1
|
+
0.2.3
|
data/gmath3D.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{gmath3D}
|
8
|
-
s.version = "0.2.
|
8
|
+
s.version = "0.2.3"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Toshiyasu Shimizu"]
|
12
|
-
s.date = %q{2011-
|
12
|
+
s.date = %q{2011-11-03}
|
13
13
|
s.description = %q{This library defines 3D geometric elements(point, line, plane etc..). It can get two(or more) elements relation, like distance between two elements.}
|
14
14
|
s.email = %q{toshi0328@gmail.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -26,6 +26,7 @@ Gem::Specification.new do |s|
|
|
26
26
|
"VERSION",
|
27
27
|
"gmath3D.gemspec",
|
28
28
|
"lib/box.rb",
|
29
|
+
"lib/ellipse.rb",
|
29
30
|
"lib/finite_line.rb",
|
30
31
|
"lib/geom.rb",
|
31
32
|
"lib/gmath3D.rb",
|
@@ -41,6 +42,7 @@ Gem::Specification.new do |s|
|
|
41
42
|
"lib/vector3.rb",
|
42
43
|
"test/helper.rb",
|
43
44
|
"test/test_box.rb",
|
45
|
+
"test/test_ellipse.rb",
|
44
46
|
"test/test_finite_line.rb",
|
45
47
|
"test/test_geom.rb",
|
46
48
|
"test/test_line.rb",
|
data/lib/box.rb
CHANGED
@@ -28,6 +28,18 @@ public
|
|
28
28
|
@max_point.z = [ point1.z, point2.z ].max
|
29
29
|
end
|
30
30
|
|
31
|
+
# [Input]
|
32
|
+
# _points_ should be Array of Vector3.
|
33
|
+
# Each points are opposing corners.
|
34
|
+
# [Output]
|
35
|
+
# return new instance of Box.
|
36
|
+
def self.from_points( points )
|
37
|
+
return nil if (points == nil || points.size <=0)
|
38
|
+
box = Box.new(points[0], points[0])
|
39
|
+
box += points
|
40
|
+
return box
|
41
|
+
end
|
42
|
+
|
31
43
|
def to_s
|
32
44
|
"Box[min#{min_point.to_element_s}, max#{max_point.to_element_s}]"
|
33
45
|
end
|
@@ -71,6 +83,7 @@ private
|
|
71
83
|
true
|
72
84
|
end
|
73
85
|
def add(rhs)
|
86
|
+
return self if (rhs == nil)
|
74
87
|
if( rhs.kind_of?(Vector3))
|
75
88
|
added_box = Box.new()
|
76
89
|
added_box.min_point.x = [ self.min_point.x, rhs.x ].min
|
data/lib/ellipse.rb
ADDED
data/lib/finite_line.rb
CHANGED
@@ -9,11 +9,13 @@ public
|
|
9
9
|
attr_accessor :start_point
|
10
10
|
attr_accessor :end_point
|
11
11
|
|
12
|
+
include BoxAvailable
|
13
|
+
|
12
14
|
# [Input]
|
13
15
|
# _start_point_ and _end_point_ should be Vector3.
|
14
16
|
# [Output]
|
15
17
|
# return new instance as FiniteLine
|
16
|
-
def initialize(start_point = Vector3.new(0
|
18
|
+
def initialize(start_point = Vector3.new(0,0,0), end_point = Vector3.new(1,0,0))
|
17
19
|
Util.check_arg_type(Vector3, start_point)
|
18
20
|
Util.check_arg_type(Vector3, end_point)
|
19
21
|
super()
|
@@ -30,6 +32,16 @@ public
|
|
30
32
|
"FiniteLine[from#{start_point.to_element_s}, to#{end_point.to_element_s}]"
|
31
33
|
end
|
32
34
|
|
35
|
+
# [Input]
|
36
|
+
# _mat_ should be Matrix which row and col size are 3.
|
37
|
+
# [Output]
|
38
|
+
# return rotated FiniteLine.
|
39
|
+
def rotate(mat)
|
40
|
+
rot_start_point = mat*start_point
|
41
|
+
rot_end_point = mat*end_point
|
42
|
+
return FiniteLine.new(rot_start_point, rot_end_point)
|
43
|
+
end
|
44
|
+
|
33
45
|
# [Input]
|
34
46
|
# _rhs_ should be FiniteLine.
|
35
47
|
# [Output]
|
@@ -42,6 +54,12 @@ public
|
|
42
54
|
return true
|
43
55
|
end
|
44
56
|
|
57
|
+
# [Output]
|
58
|
+
# return Array of start_point and end_point.
|
59
|
+
def vertices
|
60
|
+
return [start_point, end_point]
|
61
|
+
end
|
62
|
+
|
45
63
|
# [Output]
|
46
64
|
# return direction as vector from start_point to end_point as Vector3
|
47
65
|
def direction
|
data/lib/gmath3D.rb
CHANGED
data/lib/polyline.rb
CHANGED
data/lib/rectangle.rb
CHANGED
data/lib/tri_mesh.rb
CHANGED
@@ -8,6 +8,8 @@ module GMath3D
|
|
8
8
|
attr_reader :vertices
|
9
9
|
attr_reader :tri_indices
|
10
10
|
|
11
|
+
include BoxAvailable
|
12
|
+
|
11
13
|
# [Input]
|
12
14
|
# vertices is Array of Vector3.
|
13
15
|
# tri_indices is Array of triangle whick is consist of 3 vertices index.
|
@@ -204,7 +206,7 @@ module GMath3D
|
|
204
206
|
"TriMesh[triangle_count:#{tri_indices.size}, vertex_count:#{vertices.size}]"
|
205
207
|
end
|
206
208
|
|
207
|
-
|
209
|
+
# [Input]
|
208
210
|
# _index_ is index of triangle.
|
209
211
|
# [Output]
|
210
212
|
# return new instance of Triangle.
|
data/lib/triangle.rb
CHANGED
data/lib/util.rb
CHANGED
@@ -5,11 +5,20 @@ module GMath3D
|
|
5
5
|
raise(ArgumentError::new("type mismatch: #{instance.class} for #{type}"))
|
6
6
|
end
|
7
7
|
end
|
8
|
-
|
8
|
+
|
9
9
|
def self.raise_argurment_error(instance)
|
10
10
|
raise(ArgumentError::new("type mismatch: #{instance.class}"))
|
11
11
|
end
|
12
12
|
end
|
13
|
+
|
14
|
+
# Including 'vertices' methodshould be implimented that gets geometry vertices as Array of Vector3.
|
15
|
+
module BoxAvailable
|
16
|
+
# [Output]
|
17
|
+
# return axially aligned bounding box as Box.
|
18
|
+
def box
|
19
|
+
return Box.from_points( vertices )
|
20
|
+
end
|
21
|
+
end
|
13
22
|
end
|
14
23
|
|
15
24
|
class Array
|
data/lib/vector3.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# -*- coding: cp932 -*-
|
1
2
|
require 'gmath3D'
|
2
3
|
|
3
4
|
module GMath3D
|
@@ -49,6 +50,12 @@ public
|
|
49
50
|
equals_inner(rhs)
|
50
51
|
end
|
51
52
|
|
53
|
+
# [Output]
|
54
|
+
# return axially aligned bounding box as Box.
|
55
|
+
def box
|
56
|
+
return Box.new(self, self)
|
57
|
+
end
|
58
|
+
|
52
59
|
# [Input]
|
53
60
|
# _rhs_ should be Vector3.
|
54
61
|
# [Output]
|
@@ -102,6 +109,23 @@ public
|
|
102
109
|
self.x*rhs.y - self.y*rhs.x)
|
103
110
|
end
|
104
111
|
|
112
|
+
# [Output]
|
113
|
+
# return orthogonal vector as Vector3.
|
114
|
+
def arbitrary_orthogonal
|
115
|
+
return Vector3.new() if(self.length < self.tolerance)
|
116
|
+
|
117
|
+
if(!self.parallel?( Vector3.new(0.0, 1.0, 0.0) ))
|
118
|
+
un_parallel_vec = Vector3.new(0.0,1.0,0.0)
|
119
|
+
elsif(!self.parallel?( Vector3.new(0.0,0.0,1.0) ))
|
120
|
+
un_parallel_vec = Vector3.new(0.0,0.0,1.0)
|
121
|
+
else
|
122
|
+
un_parallel_vec = Vector3.new(1.0,0.0,0.0)
|
123
|
+
end
|
124
|
+
|
125
|
+
orthogonal = self.cross(un_parallel_vec)
|
126
|
+
return orthogonal.normalize
|
127
|
+
end
|
128
|
+
|
105
129
|
# [Output]
|
106
130
|
# return vector length as Numeric
|
107
131
|
def length
|
data/test/test_box.rb
CHANGED
@@ -40,6 +40,30 @@ class BoxTestCase < MiniTest::Unit::TestCase
|
|
40
40
|
end
|
41
41
|
end
|
42
42
|
|
43
|
+
def test_from_points
|
44
|
+
points = Array.new(6)
|
45
|
+
points[0] = Vector3.new( 3, 0, 1)
|
46
|
+
points[1] = Vector3.new( 2,-2, 10)
|
47
|
+
points[2] = Vector3.new(-6, 2, -4)
|
48
|
+
points[3] = Vector3.new( 3, 5, -1)
|
49
|
+
points[4] = Vector3.new(-2, 2, 2)
|
50
|
+
points[5] = Vector3.new(11, 1, 0)
|
51
|
+
box = Box.from_points(points)
|
52
|
+
assert_equal(Vector3.new(-6, -2, -4), box.min_point)
|
53
|
+
assert_equal(Vector3.new(11, 5, 10), box.max_point)
|
54
|
+
|
55
|
+
points = Array.new(2)
|
56
|
+
points[0] = Vector3.new( -3, -2, -1)
|
57
|
+
points[1] = Vector3.new( -4, -8, -10)
|
58
|
+
box = Box.from_points(points)
|
59
|
+
assert_equal(Vector3.new(-4, -8, -10), box.min_point)
|
60
|
+
assert_equal(Vector3.new(-3, -2, -1), box.max_point)
|
61
|
+
|
62
|
+
points = Array.new(0)
|
63
|
+
box = Box.from_points(points)
|
64
|
+
assert_equal(nil, box)
|
65
|
+
end
|
66
|
+
|
43
67
|
def test_equal
|
44
68
|
shallow_copied = @box
|
45
69
|
assert( shallow_copied == @box )
|
@@ -0,0 +1,55 @@
|
|
1
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
2
|
+
require 'helper'
|
3
|
+
|
4
|
+
include GMath3D
|
5
|
+
|
6
|
+
MiniTest::Unit.autorun
|
7
|
+
|
8
|
+
class EllipseTestCase < MiniTest::Unit::TestCase
|
9
|
+
def test_initialize
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_to_s
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_equals
|
16
|
+
=begin
|
17
|
+
line = FiniteLine.new()
|
18
|
+
shallow_copied = line
|
19
|
+
assert(line == shallow_copied)
|
20
|
+
assert(line.equal?(shallow_copied))
|
21
|
+
assert(line != nil)
|
22
|
+
assert(line != "string")
|
23
|
+
|
24
|
+
assert_equal(FiniteLine.new(Vector3.new(1,2,3), Vector3.new(2,3,4)),
|
25
|
+
FiniteLine.new(Vector3.new(1.0,2.0,3.0), Vector3.new(2.0,3.0,4.0)))
|
26
|
+
|
27
|
+
assert(FiniteLine.new(Vector3.new(1,2,3), Vector3.new(2,3,4)) == FiniteLine.new(Vector3.new(1.0,2.0,3.0), Vector3.new(2.0,3.0,4.0)))
|
28
|
+
assert(FiniteLine.new(Vector3.new(1,2,3), Vector3.new(2,3,3)) != FiniteLine.new(Vector3.new(1.0,2.0,3.0), Vector3.new(2.0,3.0,4.0)))
|
29
|
+
assert(FiniteLine.new(Vector3.new(1,2,3), Vector3.new(2,3,4)) != FiniteLine.new(Vector3.new(2,3,4), Vector3.new(1,2,3)))
|
30
|
+
line = FiniteLine.new(Vector3.new(1,0,2), Vector3.new(1,-3.5,2))
|
31
|
+
assert_equal("FiniteLine[from[1, 0, 2], to[1, -3.5, 2]]", line.to_s)
|
32
|
+
=end
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_clone
|
36
|
+
=begin
|
37
|
+
line = FiniteLine.new()
|
38
|
+
shallow_copied = line
|
39
|
+
shallow_copied.start_point.x = -1
|
40
|
+
assert(line == shallow_copied)
|
41
|
+
assert(line.equal?(shallow_copied))
|
42
|
+
assert_equal(-1, shallow_copied.start_point.x)
|
43
|
+
|
44
|
+
cloned = line.clone
|
45
|
+
assert(line == cloned)
|
46
|
+
assert(!line.equal?(cloned))
|
47
|
+
cloned.start_point.x = -2
|
48
|
+
assert_equal(-2, cloned.start_point.x)
|
49
|
+
|
50
|
+
assert_equal(-1, line.start_point.x) # original never changed in editing cloned one.
|
51
|
+
=end
|
52
|
+
end
|
53
|
+
|
54
|
+
|
55
|
+
end
|
data/test/test_finite_line.rb
CHANGED
@@ -24,6 +24,15 @@ class FiniteLineTestCase < MiniTest::Unit::TestCase
|
|
24
24
|
assert_equal("FiniteLine[from[1, 0, 2], to[1, -3.5, 2]]", line.to_s)
|
25
25
|
end
|
26
26
|
|
27
|
+
def test_rotation
|
28
|
+
line = FiniteLine.new(Vector3.new(1,0,0), Vector3.new(2,0,0))
|
29
|
+
angle = -45.0 * Math::PI / 180.0
|
30
|
+
mat = Matrix.from_axis( Vector3.new(0,0,1), angle )
|
31
|
+
rotated_line = line.rotate(mat)
|
32
|
+
assert_equal(Vector3.new(Math.sqrt(2)/2.0,Math.sqrt(2)/2.0,0), rotated_line.start_point)
|
33
|
+
assert_equal(Vector3.new(Math.sqrt(2),Math.sqrt(2),0), rotated_line.end_point)
|
34
|
+
end
|
35
|
+
|
27
36
|
def test_equals
|
28
37
|
line = FiniteLine.new()
|
29
38
|
shallow_copied = line
|
@@ -57,6 +66,18 @@ class FiniteLineTestCase < MiniTest::Unit::TestCase
|
|
57
66
|
assert_equal(-1, line.start_point.x) # original never changed in editing cloned one.
|
58
67
|
end
|
59
68
|
|
69
|
+
def test_box
|
70
|
+
start_point_tmp = Vector3.new(1.0, 0.0, 2.0)
|
71
|
+
end_point_tmp = Vector3.new(1.0, -3.5, 5.0)
|
72
|
+
line = FiniteLine.new(start_point_tmp, end_point_tmp)
|
73
|
+
assert_equal(Vector3.new(1, -3.5, 2), line.box.min_point)
|
74
|
+
assert_equal(Vector3.new(1, 0, 5), line.box.max_point)
|
75
|
+
|
76
|
+
line = FiniteLine.new()
|
77
|
+
assert_equal(Vector3.new(), line.box.min_point)
|
78
|
+
assert_equal(Vector3.new(1,0,0), line.box.max_point)
|
79
|
+
end
|
80
|
+
|
60
81
|
def test_direction
|
61
82
|
start_point_tmp = Vector3.new(1.0, 0.0, 2.0)
|
62
83
|
end_point_tmp = Vector3.new(1.0, -3.5, 1.0)
|
data/test/test_polyline.rb
CHANGED
@@ -79,6 +79,13 @@ class PolylineTestCase < MiniTest::Unit::TestCase
|
|
79
79
|
@polyline_closed.to_s);
|
80
80
|
end
|
81
81
|
|
82
|
+
def test_box
|
83
|
+
assert_equal(Vector3.new(0,0,0), @polyline_open.box.min_point)
|
84
|
+
assert_equal(Vector3.new(3,2,1), @polyline_open.box.max_point)
|
85
|
+
assert_equal(Vector3.new(0,0,0), @polyline_closed.box.min_point)
|
86
|
+
assert_equal(Vector3.new(3,2,1), @polyline_closed.box.max_point)
|
87
|
+
end
|
88
|
+
|
82
89
|
def test_center
|
83
90
|
assert_equal(Vector3.new(1.5, 1.0, 1.0/6.0), @polyline_open.center)
|
84
91
|
assert_equal(Vector3.new(1.5, 1.0, 1.0/6.0), @polyline_closed.center)
|
data/test/test_rectangle.rb
CHANGED
@@ -61,6 +61,15 @@ class RectangleTestCase < MiniTest::Unit::TestCase
|
|
61
61
|
assert_equal("Rectangle[base[1, 2, 3], u[0, -0.5, 0], v[0, 0, 2]", @rectangle.to_s)
|
62
62
|
end
|
63
63
|
|
64
|
+
def test_box
|
65
|
+
box1 = @rectangle.box
|
66
|
+
box2 = @rectangle_default.box
|
67
|
+
assert_equal(Vector3.new(1, 1.5, 3), box1.min_point)
|
68
|
+
assert_equal(Vector3.new(1, 2, 5), box1.max_point)
|
69
|
+
assert_equal(Vector3.new(0, 0, 0), box2.min_point)
|
70
|
+
assert_equal(Vector3.new(1, 1, 0), box2.max_point)
|
71
|
+
end
|
72
|
+
|
64
73
|
def test_point
|
65
74
|
point = @rectangle.point(0.2, 1.0)
|
66
75
|
assert_equal(Vector3.new(1, 1.9, 5), point)
|
data/test/test_tri_mesh.rb
CHANGED
@@ -88,6 +88,15 @@ class TriMeshTestCase < MiniTest::Unit::TestCase
|
|
88
88
|
assert_equal( "TriMesh[triangle_count:12, vertex_count:8]", get_box_mesh().to_s)
|
89
89
|
end
|
90
90
|
|
91
|
+
def test_box
|
92
|
+
box_mesh = get_box_mesh
|
93
|
+
plane_mesh = get_plane_mesh
|
94
|
+
assert_equal( Vector3.new(-1,-1,-1), box_mesh.box.min_point )
|
95
|
+
assert_equal( Vector3.new( 2, 3, 4), box_mesh.box.max_point )
|
96
|
+
assert_equal( Vector3.new(-1,-1,-1), plane_mesh.box.min_point )
|
97
|
+
assert_equal( Vector3.new( 1, 3,-1), plane_mesh.box.max_point )
|
98
|
+
end
|
99
|
+
|
91
100
|
def test_triangles
|
92
101
|
vertices = [Vector3.new(0,0,0),Vector3.new(2,0,0),Vector3.new(2,2,0),Vector3.new(0,2,0)]
|
93
102
|
tri_indices = [[0,1,3],[1,2,3]]
|
data/test/test_triangle.rb
CHANGED
@@ -55,6 +55,15 @@ class TriangleTestCase < MiniTest::Unit::TestCase
|
|
55
55
|
assert_equal("Triangle[[1, 2, 2], [1, 4, 2], [-1, 3, 0]]", @triangle.to_s)
|
56
56
|
end
|
57
57
|
|
58
|
+
def test_box
|
59
|
+
box1 = @triangle.box
|
60
|
+
box2 = @triangle_default.box
|
61
|
+
assert_equal(Vector3.new(-1,2,0), box1.min_point)
|
62
|
+
assert_equal(Vector3.new(1,4,2), box1.max_point)
|
63
|
+
assert_equal(Vector3.new(0,0,0) , box2.min_point)
|
64
|
+
assert_equal(Vector3.new(1,1,0) , box2.max_point)
|
65
|
+
end
|
66
|
+
|
58
67
|
def test_point
|
59
68
|
assert_equal(@triangle.vertices[0], @triangle.point( Array.new([1,0,0])))
|
60
69
|
assert_equal(@triangle.vertices[1], @triangle.point( Array.new([0,1,0])))
|
data/test/test_vector3.rb
CHANGED
@@ -144,6 +144,15 @@ class Vector3TestCase < MiniTest::Unit::TestCase
|
|
144
144
|
assert_equal(3, hash[vec])
|
145
145
|
end
|
146
146
|
|
147
|
+
def test_box
|
148
|
+
box1 = @vector.box
|
149
|
+
box2 = Vector3.new().box
|
150
|
+
assert_equal(Vector3.new(1,2,3), box1.min_point)
|
151
|
+
assert_equal(Vector3.new(1,2,3), box1.max_point)
|
152
|
+
assert_equal(Vector3.new(), box2.min_point)
|
153
|
+
assert_equal(Vector3.new(), box2.max_point)
|
154
|
+
end
|
155
|
+
|
147
156
|
def test_add
|
148
157
|
vector = Vector3.new(4,5,6)
|
149
158
|
addedVector = vector + @vector
|
@@ -397,5 +406,34 @@ class Vector3TestCase < MiniTest::Unit::TestCase
|
|
397
406
|
assert_equal( 0, matrix[2,0])
|
398
407
|
end
|
399
408
|
|
400
|
-
|
409
|
+
def test_arbitrary_orthogonal
|
410
|
+
vec1 = Vector3.new( 1.0, 2.0, 3.0 )
|
411
|
+
vec2 = Vector3.new( 1.0, 1.0, 4.0 )
|
412
|
+
vec3 = Vector3.new( 2.0, 4.0, 6.0 )
|
413
|
+
vec4 = Vector3.new( -1.0, -2.0, -3.0 )
|
414
|
+
vecx = Vector3.new( 1.0, 0.0, 0.0 )
|
415
|
+
vecy = Vector3.new( 0.0, -3.0, 0.0 )
|
416
|
+
vecz = Vector3.new( 0.0, 0.0, 5.0 )
|
417
|
+
veczero = Vector3.new( 0.0, 0.0, 0.0 )
|
418
|
+
|
419
|
+
vec1_orth = vec1.arbitrary_orthogonal
|
420
|
+
vec2_orth = vec2.arbitrary_orthogonal
|
421
|
+
vec3_orth = vec3.arbitrary_orthogonal
|
422
|
+
vec4_orth = vec4.arbitrary_orthogonal
|
423
|
+
vecx_orth = vecx.arbitrary_orthogonal
|
424
|
+
vecy_orth = vecy.arbitrary_orthogonal
|
425
|
+
vecz_orth = vecz.arbitrary_orthogonal
|
426
|
+
veczero_orth = veczero.arbitrary_orthogonal
|
427
|
+
|
428
|
+
assert_in_delta(0.5*Math::PI, vec1.angle(vec1_orth), vec1.tolerance)
|
429
|
+
assert_in_delta(0.5*Math::PI, vec2.angle(vec2_orth), vec2.tolerance)
|
430
|
+
assert_in_delta(0.5*Math::PI, vec3.angle(vec3_orth), vec3.tolerance)
|
431
|
+
assert_in_delta(0.5*Math::PI, vec4.angle(vec4_orth), vec4.tolerance)
|
432
|
+
assert_in_delta(0.5*Math::PI, vecx.angle(vecx_orth), vecx.tolerance)
|
433
|
+
assert_in_delta(0.5*Math::PI, vecy.angle(vecy_orth), vecy.tolerance)
|
434
|
+
assert_in_delta(0.5*Math::PI, vecz.angle(vecz_orth), vecz.tolerance)
|
435
|
+
assert_in_delta(0.0, veczero_orth.x, veczero.tolerance)
|
436
|
+
assert_in_delta(0.0, veczero_orth.y, veczero.tolerance)
|
437
|
+
assert_in_delta(0.0, veczero_orth.z, veczero.tolerance)
|
438
|
+
end
|
401
439
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gmath3D
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,12 +9,12 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-
|
12
|
+
date: 2011-11-03 00:00:00.000000000 +09:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: bundler
|
17
|
-
requirement: &
|
17
|
+
requirement: &2156037040 !ruby/object:Gem::Requirement
|
18
18
|
none: false
|
19
19
|
requirements:
|
20
20
|
- - ~>
|
@@ -22,10 +22,10 @@ dependencies:
|
|
22
22
|
version: 1.0.0
|
23
23
|
type: :development
|
24
24
|
prerelease: false
|
25
|
-
version_requirements: *
|
25
|
+
version_requirements: *2156037040
|
26
26
|
- !ruby/object:Gem::Dependency
|
27
27
|
name: jeweler
|
28
|
-
requirement: &
|
28
|
+
requirement: &2156035880 !ruby/object:Gem::Requirement
|
29
29
|
none: false
|
30
30
|
requirements:
|
31
31
|
- - ~>
|
@@ -33,7 +33,7 @@ dependencies:
|
|
33
33
|
version: 1.6.4
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
|
-
version_requirements: *
|
36
|
+
version_requirements: *2156035880
|
37
37
|
description: This library defines 3D geometric elements(point, line, plane etc..).
|
38
38
|
It can get two(or more) elements relation, like distance between two elements.
|
39
39
|
email: toshi0328@gmail.com
|
@@ -52,6 +52,7 @@ files:
|
|
52
52
|
- VERSION
|
53
53
|
- gmath3D.gemspec
|
54
54
|
- lib/box.rb
|
55
|
+
- lib/ellipse.rb
|
55
56
|
- lib/finite_line.rb
|
56
57
|
- lib/geom.rb
|
57
58
|
- lib/gmath3D.rb
|
@@ -67,6 +68,7 @@ files:
|
|
67
68
|
- lib/vector3.rb
|
68
69
|
- test/helper.rb
|
69
70
|
- test/test_box.rb
|
71
|
+
- test/test_ellipse.rb
|
70
72
|
- test/test_finite_line.rb
|
71
73
|
- test/test_geom.rb
|
72
74
|
- test/test_line.rb
|
@@ -95,7 +97,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
95
97
|
version: '0'
|
96
98
|
segments:
|
97
99
|
- 0
|
98
|
-
hash:
|
100
|
+
hash: 3556461112353261793
|
99
101
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
100
102
|
none: false
|
101
103
|
requirements:
|