Class: Geometry::Circle

Inherits:
Object
  • Object
show all
Includes:
ClusterFactory
Defined in:
lib/geometry/circle.rb

Overview

Circles come in all shapes and sizes, but they’re usually round.

Usage

circle = Geometry::Circle.new [1,2], 3
circle = Geometry::Circle.new center:[1,2], radius:3
circle = Geometry::Circle.new center:[1,2], diameter:6
circle = Geometry::Circle.new diameter:6

Direct Known Subclasses

CenterDiameterCircle

Accessors collapse

Instance Attribute Summary collapse

Accessors collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from ClusterFactory

included

Constructor Details

#initialize(center, radius) ⇒ Circle

Construct a new Geometry::Circle from a centerpoint and radius

Parameters:



62
63
64
65
# File 'lib/geometry/circle.rb', line 62

def initialize(center, radius)
    @center = Point[center]
    @radius = radius
end

Instance Attribute Details

#centerPoint (readonly)

Returns The Geometry::Circle‘s center point.

Returns:



20
21
22
# File 'lib/geometry/circle.rb', line 20

def center
  @center
end

#diameterObject (readonly)



80
81
82
# File 'lib/geometry/circle.rb', line 80

def diameter
    @radius*2
end

#optionsObject



25
26
27
28
# File 'lib/geometry/circle.rb', line 25

def options
	@options = {} if !@options
	@options
end

#radiusNumber (readonly)

Returns The Geometry::Circle‘s radius.

Returns:



23
24
25
# File 'lib/geometry/circle.rb', line 23

def radius
  @radius
end

Class Method Details

.new(center, radius) ⇒ Object .new(center, radius) ⇒ Object .new(center, diameter) ⇒ Object

Overloads:

  • .new(center, radius) ⇒ Object

    Construct a Geometry::Circle using a centerpoint and radius

    Parameters:

  • .new(center, radius) ⇒ Object

    Construct a circle using named center and radius parameters

  • .new(center, diameter) ⇒ Object

    Construct a circle using named center and diameter parameters



41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/geometry/circle.rb', line 41

def self.new(*args, &block)
    options, args = args.partition {|a| a.is_a? Hash}
    options = options.reduce({}, :merge)
    center, radius = args[0..1]

    center ||= (options[:center] || PointZero.new)
    radius ||= options[:radius]

    if radius
	self.allocate.tap {|circle| circle.send :initialize, center, radius, &block }
    elsif options.has_key?(:diameter)
	CenterDiameterCircle.new center, options[:diameter], &block
    else
	raise ArgumentError, "Circle.new requires a radius or a diameter"
    end
end

Instance Method Details

#boundsRectangle

Returns The smallest axis-aligned Rectangle that bounds the receiver.

Returns:



74
75
76
# File 'lib/geometry/circle.rb', line 74

def bounds
    return Rectangle.new(self.min, self.max)
end

#eql?(other) ⇒ Boolean Also known as: ==

Returns:

  • (Boolean)


67
68
69
# File 'lib/geometry/circle.rb', line 67

def eql?(other)
    (self.center == other.center) && (self.radius == other.radius)
end

#maxPoint

Returns The upper right corner of the bounding Rectangle.

Returns:



85
86
87
# File 'lib/geometry/circle.rb', line 85

def max
    @center+radius
end

#minPoint

Returns The lower left corner of the bounding Rectangle.

Returns:



90
91
92
# File 'lib/geometry/circle.rb', line 90

def min
    @center-radius
end

#minmaxArray<Point>

Returns The lower left and upper right corners of the bounding Rectangle.

Returns:

  • (Array<Point>)

    The lower left and upper right corners of the bounding Rectangle



95
96
97
# File 'lib/geometry/circle.rb', line 95

def minmax
    [self.min, self.max]
end