Class: Geometry::Square
- Inherits:
-
Object
- Object
- Geometry::Square
- Includes:
- ClusterFactory
- Defined in:
- lib/geometry/square.rb
Overview
The Square class cluster is like the Rectangle class cluster, but not longer in one direction.
Constructors
Square.new from:[1,2], to:[2,3] # Using two corners
Square.new origin:[3,4], size:5 # Using an origin point and a size
Square.new center:[5,5], size:5 # Using a center point and a size
Square.new size:5 # Centered on the origin
Direct Known Subclasses
Instance Attribute Summary collapse
- #closed? ⇒ Boolean
-
#origin ⇒ Point
The lower left corner.
Class Method Summary collapse
-
.new(: origin, : size) ⇒ CenteredSquare
Creates a Square with the given origin and size.
Instance Method Summary collapse
- #height ⇒ Object
- #initialize(options = {}) ⇒ Square constructor
-
#max ⇒ Point
The upper right corner of the bounding Rectangle.
-
#min ⇒ Point
The lower left corner of the bounding Rectangle.
-
#minmax ⇒ Array<Point>
The lower left and upper right corners of the bounding Rectangle.
- #width ⇒ Object
Methods included from ClusterFactory
Constructor Details
#initialize(options = {}) ⇒ Square
Creates a Geometry::Square given two Points
52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
# File 'lib/geometry/square.rb', line 52 def initialize(={}) origin = [:from] || [:origin] origin = origin ? Point[origin] : PointZero.new if .has_key? :to point1 = [:to] end point1 = Point[point1] raise(ArgumentError, "Point sizes must match (#{origin.size} != #{point1.size})") unless origin.is_a?(PointZero) || (origin.size == point1.size) # Reorder the points to get lower-left and upper-right minx, maxx = [origin.x, point1.x].minmax miny, maxy = [origin.y, point1.y].minmax @points = [Point[minx, miny], Point[maxx, maxy]] raise(NotSquareError) if height != width end |
Instance Attribute Details
#closed? ⇒ Boolean
74 75 76 |
# File 'lib/geometry/square.rb', line 74 def closed? true end |
#origin ⇒ Point
Returns The lower left corner.
21 22 23 |
# File 'lib/geometry/square.rb', line 21 def origin @origin end |
Class Method Details
.new(: origin, : size) ⇒ CenteredSquare
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/geometry/square.rb', line 28 def self.new(*args) , args = args.partition {|a| a.is_a? Hash} = .reduce({}, :merge) if .key?(:size) unless [:size].is_a? Numeric raise NotSquareError, 'Size must be a square' unless [:size].all? {|a| a == [:size].first} [:size] = [:size].first end if .key? :origin SizedSquare.new([:origin], [:size]) else CenteredSquare.new([:center] || PointZero.new, [:size]) end elsif .key?(:from) and .key?(:to) original_new(from: [:from], to: [:to]) end end |
Instance Method Details
#height ⇒ Object
99 100 101 102 |
# File 'lib/geometry/square.rb', line 99 def height min, max = @points.minmax {|a,b| a.y <=> b.y} max.y - min.y end |
#max ⇒ Point
Returns The upper right corner of the bounding Rectangle.
79 80 81 |
# File 'lib/geometry/square.rb', line 79 def max @points.last end |
#min ⇒ Point
Returns The lower left corner of the bounding Rectangle.
84 85 86 |
# File 'lib/geometry/square.rb', line 84 def min @points.first end |
#minmax ⇒ Array<Point>
Returns The lower left and upper right corners of the bounding Rectangle.
89 90 91 |
# File 'lib/geometry/square.rb', line 89 def minmax [self.min, self.max] end |
#width ⇒ Object
104 105 106 107 |
# File 'lib/geometry/square.rb', line 104 def width min, max = @points.minmax {|a,b| a.x <=> b.x} max.x - min.x end |