Class: Geometry::RegularPolygon

Inherits:
Polygon show all
Includes:
ClusterFactory
Defined in:
lib/geometry/regular_polygon.rb

Overview

A RegularPolygon is a lot like a Polygon, but more regular.

http://en.wikipedia.org/wiki/Regular_polygon

Usage

polygon = Geometry::RegularPolygon.new sides:4, center:[1,2], radius:3
polygon = Geometry::RegularPolygon.new sides:6, center:[1,2], diameter:6

Direct Known Subclasses

DiameterRegularPolygon

Accessors collapse

Instance Attribute Summary collapse

Attributes inherited from Polyline

#edges, #vertices

Class Method Summary collapse

Instance Method Summary collapse

Methods included from ClusterFactory

included

Methods inherited from Polygon

#<=>, #clockwise?, #convex, #offset_bisectors, #outset, #reverse, #union, #wrap

Methods inherited from Polyline

#offset, #rightset

Constructor Details

#initialize(edge_count, center, radius) ⇒ RegularPolygon

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

Parameters:

  • edge_count (Number)

    The number of edges

  • center (Point)

    The center point of the Circle

  • radius (Number)

    The radius of the Circle



57
58
59
60
61
# File 'lib/geometry/regular_polygon.rb', line 57

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

Instance Attribute Details

#centerPoint (readonly)

Returns The Geometry::RegularPolygon‘s center point.

Returns:



19
20
21
# File 'lib/geometry/regular_polygon.rb', line 19

def center
  @center
end

#diameterObject (readonly)



71
72
73
# File 'lib/geometry/regular_polygon.rb', line 71

def diameter
    @radius*2
end

#edge_countNumber (readonly)

Returns The Geometry::RegularPolygon‘s number of sides.

Returns:



22
23
24
# File 'lib/geometry/regular_polygon.rb', line 22

def edge_count
  @edge_count
end

#radiusNumber (readonly)

Returns The Geometry::RegularPolygon‘s radius.

Returns:



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

def radius
  @radius
end

Class Method Details

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

Overloads:

Raises:

  • (ArgumentError)


37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/geometry/regular_polygon.rb', line 37

def self.new(options={}, &block)
    raise ArgumentError, "RegularPolygon requires an edge count" unless options[:sides]

    center = options[:center]
    center = center ? Point[center] : nil

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

Instance Method Details

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

Returns:

  • (Boolean)


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

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