geometry-in-ruby 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ MTBkMWEwZmMyZDA3ZDRjM2U5MTA1MTYzZjk0OWUzOTYzZTdmMDMzNg==
5
+ data.tar.gz: !binary |-
6
+ YWM5NTNhNWY0ZDMzZjEzNzc4MGNmYmFhZTZjZTg5NTZkZTZhOThjYw==
7
+ SHA512:
8
+ metadata.gz: !binary |-
9
+ YzdlMmNkNWRhZmFiZTkzYzNjZGYzMTUzMmVmOTBhNmE1ZDQwZDlkYThmZTBk
10
+ NzkxYzFkMWUwYzFkMzc0NTI0NDk0MDlhYjczZjc5YzljMWY2ZGE5ZGYzZDI0
11
+ N2Y0NWIxMWQ5ZWI5NGY3MjlhMGI2MTBjYjUzYjlhMTMyMTNiODg=
12
+ data.tar.gz: !binary |-
13
+ MzU0NTk0MjMwOWEzN2FkZDY0NGU5N2I5NmRjYjhhNWVkMDkzYWI1ZTVlZmIw
14
+ Y2Y1YmU1ZTU2OWZlMmI0N2I4NWE4NGFkNjRlMTAxY2YxZGMzMzU5ZGZkOTM3
15
+ Y2IwMGE3ZDBhZTk2YTQxZjg2N2ZkZGJlZTczOWEwYTk0MmQ5Nzg=
@@ -3,7 +3,7 @@ $:.push File.expand_path("../lib", __FILE__)
3
3
 
4
4
  Gem::Specification.new do |s|
5
5
  s.name = "geometry-in-ruby"
6
- s.version = '0.0.1'
6
+ s.version = '0.0.2'
7
7
  s.authors = ["Brandon Fosdick", "Meseker Yohannes"]
8
8
  s.email = ["meseker.yohannes@gmail.com"]
9
9
  s.homepage = "http://github.com/meseker/geometry"
data/lib/geometry/edge.rb CHANGED
@@ -14,6 +14,11 @@ An edge. It's a line segment between 2 points. Generally part of a {Polygon}.
14
14
 
15
15
  class Edge
16
16
  attr_reader :first, :last
17
+ attr_writer :options
18
+ def options
19
+ @options = {} if !@options
20
+ @options
21
+ end
17
22
 
18
23
  # Construct a new {Edge} object from any two things that can be converted
19
24
  # to a {Point}.
data/lib/geometry/line.rb CHANGED
@@ -28,9 +28,17 @@ Supports two-point, slope-intercept, and point-slope initializer forms
28
28
  Geometry::Line.vertical(x=0)
29
29
  =end
30
30
 
31
- class Line
31
+ ############
32
+ #/# Line #/#
33
+ ############
34
+ class Line
32
35
  include ClusterFactory
33
-
36
+ attr_writer :options
37
+ def options
38
+ @options = {} if !@options
39
+ @options
40
+ end
41
+
34
42
  # @overload [](Array, Array)
35
43
  # @return [TwoPointLine]
36
44
  # @overload [](Point, Point)
@@ -42,20 +50,20 @@ Supports two-point, slope-intercept, and point-slope initializer forms
42
50
  # @overload [](point, slope)
43
51
  # @return [PointSlopeLine]
44
52
  def self.[](*args)
45
- if( 2 == args.size )
46
- args.map! {|x| x.is_a?(Array) ? Point[*x] : x}
47
-
48
- # If both args are Points, create a TwoPointLine
49
- return TwoPointLine.new(*args) if args.all? {|x| x.is_a?(Vector)}
50
-
51
- # If only the first arg is a Point, create a PointSlopeLine
52
- return PointSlopeLine.new(*args) if args.first.is_a?(Vector)
53
-
54
- # Otherise, create a SlopeInterceptLine
55
- return SlopeInterceptLine.new(*args)
56
- else
57
- nil
58
- end
53
+ if( 2 == args.size )
54
+ args.map! {|x| x.is_a?(Array) ? Point[*x] : x}
55
+
56
+ # If both args are Points, create a TwoPointLine
57
+ return TwoPointLine.new(*args) if args.all? {|x| x.is_a?(Vector)}
58
+
59
+ # If only the first arg is a Point, create a PointSlopeLine
60
+ return PointSlopeLine.new(*args) if args.first.is_a?(Vector)
61
+
62
+ # Otherise, create a SlopeInterceptLine
63
+ return SlopeInterceptLine.new(*args)
64
+ else
65
+ nil
66
+ end
59
67
  end
60
68
 
61
69
  # @overload new(from, to)
@@ -67,16 +75,16 @@ Supports two-point, slope-intercept, and point-slope initializer forms
67
75
  # @option options [Point] :end An end {Point}
68
76
  # @return [TwoPointLine]
69
77
  def self.new(options={})
70
- from = options[:from] || options[:start]
71
- to = options[:end] || options[:to]
72
-
73
- if from and to
74
- TwoPointLine.new(from, to)
75
- else
76
- raise ArgumentError, "Start and end Points must be provided"
78
+ from = options[:from] || options[:start]
79
+ to = options[:end] || options[:to]
80
+
81
+ if from and to
82
+ TwoPointLine.new(from, to)
83
+ else
84
+ raise ArgumentError, "Start and end Points must be provided"
77
85
  end
78
86
  end
79
-
87
+
80
88
  def self.horizontal(y_intercept=0)
81
89
  SlopeInterceptLine.new(0, y_intercept)
82
90
  end
@@ -84,71 +92,81 @@ Supports two-point, slope-intercept, and point-slope initializer forms
84
92
  SlopeInterceptLine.new(1/0.0, x_intercept)
85
93
  end
86
94
  end
87
-
88
- # @private
89
- class PointSlopeLine < Line
90
- # @return [Number] the slope of the {Line}
91
- attr_reader :slope
92
-
93
- def initialize(point, slope)
94
- @point = Point[point]
95
- @slope = slope
96
- end
97
- def to_s
98
- 'Line(' + @slope.to_s + ',' + @point.to_s + ')'
99
- end
100
- end
101
-
102
- # @private
103
- class SlopeInterceptLine < Line
104
- # @return [Number] the slope of the {Line}
105
- attr_reader :slope
106
-
107
- def initialize(slope, intercept)
108
- @slope = slope
109
- @intercept = intercept
95
+
96
+ ######################
97
+ #/# PointSlopeLine #/#
98
+ ######################
99
+ # @private
100
+ class PointSlopeLine < Line
101
+ # @return [Number] the slope of the {Line}
102
+ attr_reader :slope
103
+
104
+ def initialize(point, slope)
105
+ @point = Point[point]
106
+ @slope = slope
107
+ end
108
+ def to_s
109
+ 'Line(' + @slope.to_s + ',' + @point.to_s + ')'
110
+ end
110
111
  end
111
-
112
- def horizontal?
113
- 0 == @slope
114
- end
115
- def vertical?
116
- (1/0.0) == @slope
117
- end
118
-
119
- def intercept(axis=:y)
120
- case axis
121
- when :x
122
- vertical? ? @intercept : (horizontal? ? nil : (-@intercept/@slope))
123
- when :y
124
- vertical? ? nil : @intercept
125
- end
126
- end
127
-
128
- def to_s
129
- 'Line(' + @slope.to_s + ',' + @intercept.to_s + ')'
130
- end
131
- end
132
-
133
- # @private
134
- class TwoPointLine < Line
135
- attr_reader :first, :last
136
-
137
- def initialize(point0, point1)
138
- @first, @last = [Point[point0], Point[point1]]
139
- end
140
- def inspect
141
- 'Line(' + @first.inspect + ', ' + @last.inspect + ')'
142
- end
143
- alias :to_s :inspect
144
-
145
- # @group Accessors
146
- # !@attribute [r[ slope
147
- # @return [Number] the slope of the {Line}
148
- def slope
149
- (last.y - first.y)/(last.x - first.x)
112
+
113
+ ##########################
114
+ #/# SlopeInterceptLine #/#
115
+ ##########################
116
+ # @private
117
+ class SlopeInterceptLine < Line
118
+ # @return [Number] the slope of the {Line}
119
+ attr_reader :slope
120
+
121
+ def initialize(slope, intercept)
122
+ @slope = slope
123
+ @intercept = intercept
124
+ end
125
+
126
+ def horizontal?
127
+ 0 == @slope
128
+ end
129
+
130
+ def vertical?
131
+ (1/0.0) == @slope
132
+ end
133
+
134
+ def intercept(axis=:y)
135
+ case axis
136
+ when :x
137
+ vertical? ? @intercept : (horizontal? ? nil : (-@intercept/@slope))
138
+ when :y
139
+ vertical? ? nil : @intercept
140
+ end
141
+ end
142
+
143
+ def to_s
144
+ 'Line(' + @slope.to_s + ',' + @intercept.to_s + ')'
145
+ end
150
146
  end
147
+
148
+ ####################
149
+ #/# TwoPointLine #/#
150
+ ####################
151
+ # @private
152
+ class TwoPointLine < Line
153
+ attr_reader :first, :last
154
+
155
+ def initialize(point0, point1)
156
+ @first, @last = [Point[point0], Point[point1]]
157
+ end
158
+ def inspect
159
+ 'Line(' + @first.inspect + ', ' + @last.inspect + ')'
160
+ end
161
+ alias :to_s :inspect
162
+
163
+ # @group Accessors
164
+ # !@attribute [r[ slope
165
+ # @return [Number] the slope of the {Line}
166
+ def slope
167
+ (last.y - first.y)/(last.x - first.x)
168
+ end
151
169
  # @endgroup
152
- end
170
+ end
153
171
  end
154
172
 
@@ -16,7 +16,11 @@ but there's currently nothing that enforces simplicity.
16
16
  =end
17
17
 
18
18
  class Polygon < Polyline
19
-
19
+ attr_writer :options
20
+ def options
21
+ @options = {} if !@options
22
+ @options
23
+ end
20
24
  # Construct a new Polygon from Points and/or Edges
21
25
  # The constructor will try to convert all of its arguments into Points and
22
26
  # Edges. Then successive Points will be collpased into Edges. Successive
@@ -14,6 +14,11 @@ also like a {Path} in that it isn't necessarily closed.
14
14
 
15
15
  class Polyline
16
16
  attr_reader :edges, :vertices
17
+ attr_writer :options
18
+ def options
19
+ @options = {} if !@options
20
+ @options
21
+ end
17
22
 
18
23
  # Construct a new Polyline from Points and/or Edges
19
24
  # @note The constructor will try to convert all of its arguments into {Point}s and
@@ -35,7 +35,11 @@ The {Rectangle} class cluster represents your typical arrangement of 4 corners a
35
35
  attr_reader :size
36
36
  # @return [Number] Width of the {Rectangle}
37
37
  attr_reader :width
38
-
38
+ attr_writer :options
39
+ def options
40
+ @options = {} if !@options
41
+ end
42
+
39
43
  # @overload new(width, height)
40
44
  # Creates a {Rectangle} of the given width and height, centered on the origin
41
45
  # @param [Number] height Height
@@ -13,7 +13,11 @@ The {Square} class cluster is like the {Rectangle} class cluster, but not longer
13
13
  =end
14
14
  class Square
15
15
  attr_reader :origin
16
-
16
+ attr_writer :options
17
+ def options
18
+ @options = {} if !@options
19
+ end
20
+
17
21
  # Creates a {Square} given two {Point}s
18
22
  # @option options [Point] :from A corner (ie. bottom-left)
19
23
  # @option options [Point] :to The other corner (ie. top-right)
data/lib/geometry/text.rb CHANGED
@@ -3,6 +3,11 @@ require_relative 'point'
3
3
  module Geometry
4
4
 
5
5
  class Text
6
+ attr_writer :options
7
+ def options
8
+ @options = {} if !@options
9
+ @options
10
+ end
6
11
 
7
12
  # @return [Point] The point located in the top left corner of {Text}'s
8
13
  # bounding box
metadata CHANGED
@@ -1,8 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: geometry-in-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
5
- prerelease:
4
+ version: 0.0.2
6
5
  platform: ruby
7
6
  authors:
8
7
  - Brandon Fosdick
@@ -10,7 +9,7 @@ authors:
10
9
  autorequire:
11
10
  bindir: bin
12
11
  cert_chain: []
13
- date: 2014-03-13 00:00:00.000000000 Z
12
+ date: 2014-03-21 00:00:00.000000000 Z
14
13
  dependencies: []
15
14
  description: Geometric primitives and algorithms for Ruby
16
15
  email:
@@ -71,27 +70,26 @@ files:
71
70
  - test/geometry/vector.rb
72
71
  homepage: http://github.com/meseker/geometry
73
72
  licenses: []
73
+ metadata: {}
74
74
  post_install_message:
75
75
  rdoc_options: []
76
76
  require_paths:
77
77
  - lib
78
78
  required_ruby_version: !ruby/object:Gem::Requirement
79
- none: false
80
79
  requirements:
81
80
  - - ! '>='
82
81
  - !ruby/object:Gem::Version
83
82
  version: '0'
84
83
  required_rubygems_version: !ruby/object:Gem::Requirement
85
- none: false
86
84
  requirements:
87
85
  - - ! '>='
88
86
  - !ruby/object:Gem::Version
89
87
  version: '0'
90
88
  requirements: []
91
89
  rubyforge_project: aurora_geometry
92
- rubygems_version: 1.8.23
90
+ rubygems_version: 2.2.2
93
91
  signing_key:
94
- specification_version: 3
92
+ specification_version: 4
95
93
  summary: Geometric primitives and algoritms
96
94
  test_files:
97
95
  - test/geometry.rb