lib/perfect_shape/shape.rb in perfect-shape-0.0.6 vs lib/perfect_shape/shape.rb in perfect-shape-0.0.7
- old
+ new
@@ -20,9 +20,51 @@
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
module PerfectShape
# Superclass of all shapes
class Shape
+ # Subclasses must implement
+ def min_x
+ end
+
+ # Subclasses must implement
+ def min_y
+ end
+
+ # Subclasses must implement
+ def max_x
+ end
+
+ # Subclasses must implement
+ def max_y
+ end
+
+ # Subclasses must implement
+ def width
+ end
+
+ # Subclasses must implement
+ def height
+ end
+
+ # center_x is min_x + width/2.0 by default
+ # Returns nil if min_x or width are nil
+ def center_x
+ min_x + width / BigDecimal('2.0') if min_x && width
+ end
+
+ # center_y is min_y + height/2.0 by default
+ # Returns nil if min_y or height are nil
+ def center_y
+ min_y + height / BigDecimal('2.0') if min_y && height
+ end
+
+ # Rectangle with x = self.min_x, y = self.min_y, width = self.width, height = self.height
+ def bounding_box
+ require 'perfect_shape/rectangle'
+ Rectangle.new(x: min_x, y: min_y, width: width, height: height)
+ end
+
# Normalizes point args whether two-number Array or x, y args returning
# normalized point array of two BigDecimal's
#
# @param x_or_point The point or X coordinate of the point to test.
# @param y The Y coordinate of the point to test.