gmath3D 0.2.2 → 0.2.3

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.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.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.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-10-25}
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
@@ -0,0 +1,11 @@
1
+ require 'gmath3D'
2
+
3
+ module GMath3D
4
+ #
5
+ #
6
+ class Ellipse < Geom
7
+ def initialize(origin = Vector3.new(), axis1 = Vector3.new(1,0,0), axis2 = Vector3.new(0,1,0))
8
+
9
+ end
10
+ end
11
+ end
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.0,0.0,0.0), end_point = Vector3.new(1.0,0.0,0.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
@@ -8,6 +8,8 @@ require 'matrix_util'
8
8
 
9
9
  require 'line'
10
10
  require 'finite_line'
11
+ require 'ellipse'
12
+
11
13
  require 'plane'
12
14
  require 'rectangle'
13
15
  require 'triangle'
data/lib/polyline.rb CHANGED
@@ -9,6 +9,8 @@ module GMath3D
9
9
  attr_accessor :vertices
10
10
  attr_accessor :is_open
11
11
 
12
+ include BoxAvailable
13
+
12
14
  # [Input]
13
15
  # _vertices_ should be Array of Vector3.
14
16
  # [Output]
data/lib/rectangle.rb CHANGED
@@ -12,6 +12,8 @@ public
12
12
  attr_accessor:u_vector
13
13
  attr_accessor:v_vector
14
14
 
15
+ include BoxAvailable
16
+
15
17
  # [Input]
16
18
  # _base_point_ , _u_vector_, _v_vector_ should be Vector3.
17
19
  # _u_vector_ and _v_vector_ should be orthogonalized.
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
- # [Input]
209
+ # [Input]
208
210
  # _index_ is index of triangle.
209
211
  # [Output]
210
212
  # return new instance of Triangle.
data/lib/triangle.rb CHANGED
@@ -6,7 +6,9 @@ module GMath3D
6
6
  #
7
7
  class Triangle < Geom
8
8
  public
9
- attr_accessor:vertices
9
+ attr_accessor :vertices
10
+
11
+ include BoxAvailable
10
12
 
11
13
  # [Input]
12
14
  # _vertex1_, _vertex2_, _vertex3_ should be Vector3.
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
@@ -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)
@@ -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)
@@ -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)
@@ -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]]
@@ -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.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-10-25 00:00:00.000000000 +09:00
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: &2152196520 !ruby/object:Gem::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: *2152196520
25
+ version_requirements: *2156037040
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: jeweler
28
- requirement: &2152195120 !ruby/object:Gem::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: *2152195120
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: -2118171931574002143
100
+ hash: 3556461112353261793
99
101
  required_rubygems_version: !ruby/object:Gem::Requirement
100
102
  none: false
101
103
  requirements: