Class: Geometry::Rectangle
- Inherits:
-
Object
- Object
- Geometry::Rectangle
- Includes:
- ClusterFactory
- Defined in:
- lib/geometry/rectangle.rb
Overview
The Rectangle class cluster represents your typical arrangement of 4 corners and 4 sides.
Usage
Constructors
rect = Rectangle.new [1,2], [2,3] # Using two corners
rect = Rectangle.new from:[1,2], to:[2,3] # Using two corners
rect = Rectangle.new center:[1,2], size:[1,1] # Using a center point and a size
rect = Rectangle.new origin:[1,2], size:[1,1] # Using an origin point and a size
rect = Rectangle.new size: [10, 20] # origin = [0,0], size = [10, 20]
rect = Rectangle.new size: Size[10, 20] # origin = [0,0], size = [10, 20]
rect = Rectangle.new width: 10, height: 20 # origin = [0,0], size = [10, 20]
Direct Known Subclasses
Accessors collapse
-
#center ⇒ Point
readonly
The Rectangle‘s center.
-
#height ⇒ Number
readonly
Height of the Rectangle.
-
#origin ⇒ Point
readonly
The Rectangle‘s origin.
-
#width ⇒ Number
readonly
Width of the Rectangle.
Instance Attribute Summary collapse
- #size ⇒ Size readonly
Accessors collapse
-
#bounds ⇒ Rectangle
The smallest axis-aligned Rectangle that bounds the receiver.
-
#edges ⇒ Array<Edge>
The Rectangle‘s four edges (counterclockwise).
-
#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.
-
#points ⇒ Array<Point>
The Rectangle‘s four points (counterclockwise).
Class Method Summary collapse
Instance Method Summary collapse
- #eql?(other) ⇒ Boolean (also: #==)
- #initialize(point0, point1) ⇒ Rectangle constructor
Methods included from ClusterFactory
Constructor Details
#initialize(point0, point1) ⇒ Rectangle
Creates a Geometry::Rectangle using the given Points
@param [Point] point0 A corner (ie. bottom-left)
@param [Point] point1 The other corner (ie. top-right)
89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 |
# File 'lib/geometry/rectangle.rb', line 89 def initialize(point0, point1) point0 = Point[point0] point1 = Point[point1] raise(ArgumentError, "Point sizes must match") unless point0.size == point1.size # Reorder the points to get lower-left and upper-right if (point0.x > point1.x) && (point0.y > point1.y) point0, point1 = point1, point0 else p0x, p1x = [point0.x, point1.x].minmax p0y, p1y = [point0.y, point1.y].minmax point0 = Point[p0x, p0y] point1 = Point[p1x, p1y] end @points = [point0, point1] end |
Instance Attribute Details
#center ⇒ Point (readonly)
Returns The Geometry::Rectangle‘s center.
29 30 31 |
# File 'lib/geometry/rectangle.rb', line 29 def center @center end |
#height ⇒ Number (readonly)
Returns Height of the Geometry::Rectangle.
31 32 33 |
# File 'lib/geometry/rectangle.rb', line 31 def height @height end |
#origin ⇒ Point (readonly)
Returns The Geometry::Rectangle‘s origin.
33 34 35 |
# File 'lib/geometry/rectangle.rb', line 33 def origin @origin end |
#size ⇒ Size (readonly)
Returns The Size of the Geometry::Rectangle.
35 36 37 |
# File 'lib/geometry/rectangle.rb', line 35 def size @size end |
#width ⇒ Number (readonly)
Returns Width of the Geometry::Rectangle.
37 38 39 |
# File 'lib/geometry/rectangle.rb', line 37 def width @width end |
Class Method Details
.new(width, height) ⇒ CenteredRectangle .new(size) ⇒ CenteredRectangle .new(point0, point1) ⇒ Object .new(origin, size) ⇒ SizedRectangle .new(left, bottom, right, top) ⇒ Object
63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
# File 'lib/geometry/rectangle.rb', line 63 def self.new(*args) , args = args.partition {|a| a.is_a? Hash} = .reduce({}, :merge) if .has_key?(:size) if .has_key?(:center) CenteredRectangle.new(center: [:center], size: [:size]) elsif .has_key?(:origin) SizedRectangle.new(origin: [:origin], size: [:size]) else SizedRectangle.new(size: [:size]) end elsif .has_key?(:from) and .has_key?(:to) original_new([:from], [:to]) elsif .has_key?(:height) and .has_key?(:width) SizedRectangle.new(height: [:height], width: [:width]) elsif (2==args.count) and (args.all? {|a| a.is_a?(Array) || a.is_a?(Point) }) original_new(*args) else raise ArgumentError, "Bad Rectangle arguments: #{args}, #{}" end end |
Instance Method Details
#bounds ⇒ Rectangle
Returns The smallest axis-aligned Geometry::Rectangle that bounds the receiver.
114 115 116 |
# File 'lib/geometry/rectangle.rb', line 114 def bounds return Rectangle.new(self.min, self.max) end |
#edges ⇒ Array<Edge>
Returns The Geometry::Rectangle‘s four edges (counterclockwise).
125 126 127 128 129 130 131 132 133 |
# File 'lib/geometry/rectangle.rb', line 125 def edges point0, point2 = *@points point1 = Point[point2.x, point0.y] point3 = Point[point0.x, point2.y] [Edge.new(point0, point1), Edge.new(point1, point2), Edge.new(point2, point3), Edge.new(point3, point0)] end |
#eql?(other) ⇒ Boolean Also known as: ==
106 107 108 |
# File 'lib/geometry/rectangle.rb', line 106 def eql?(other) self.points == other.points end |
#max ⇒ Point
Returns The upper right corner of the bounding Geometry::Rectangle.
136 137 138 |
# File 'lib/geometry/rectangle.rb', line 136 def max @points.last end |
#min ⇒ Point
Returns The lower left corner of the bounding Geometry::Rectangle.
141 142 143 |
# File 'lib/geometry/rectangle.rb', line 141 def min @points.first end |
#minmax ⇒ Array<Point>
Returns The lower left and upper right corners of the bounding Geometry::Rectangle.
146 147 148 |
# File 'lib/geometry/rectangle.rb', line 146 def minmax [self.min, self.max] end |
#points ⇒ Array<Point>
Returns The Geometry::Rectangle‘s four points (counterclockwise).
151 152 153 154 155 156 |
# File 'lib/geometry/rectangle.rb', line 151 def points point0, point2 = *@points point1 = Point[point2.x, point0.y] point3 = Point[point0.x, point2.y] [point0, point1, point2, point3] end |