Class: Geometry::Annulus

Inherits:
Object
  • Object
show all
Defined in:
lib/geometry/annulus.rb

Overview

An ) Annulus, more commonly known as a Ring, is a circle that ate another circle.

Usage

ring = Geometry::Annulus.new center:[1,2], inner_radius:5, radius:10
ring = Geometry::Ring.new center:[1,2], inner_radius:5, radius:10

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(center, : inner_radius, : outer_radius) ⇒ Annulus #initialize(center, : inner_diameter, : outer_diameter) ⇒ Annulus

Note:

The ‘center’ argument can also be passed as a named argument of the same name

Returns a new instance of Annulus.

Overloads:

  • #initialize(center, : inner_radius, : outer_radius) ⇒ Annulus

    Parameters:

    • center (Point)

      The center Point, defaults to the origin

    • :inner_radius (Number)

      The radius of the hole that’s in the center

    • :outer_radius (Number)

      The overall radius of the whole thing

  • #initialize(center, : inner_diameter, : outer_diameter) ⇒ Annulus

    Parameters:

    • center (Point)

      The center Point, defaults to the origin

    • :inner_diameter (Number)

      The radius of the hole that’s in the center

    • :outer_diameter (Number)

      The overall radius of the whole thing

Raises:

  • (ArgumentError)


58
59
60
61
62
63
64
65
66
67
68
# File 'lib/geometry/annulus.rb', line 58

def initialize(center = Point.zero, **options)
    @center = Point[options.fetch(:center, center)]

    options.delete :center
    raise ArgumentError, 'Annulus requires more than a center' if options.empty?

    @inner_diameter = options[:inner_diameter]
    @inner_radius = options[:inner_radius]
    @outer_diameter = options[:outer_diameter] || options[:diameter]
    @outer_radius = options[:outer_radius] || options[:radius]
end

Instance Attribute Details

#centerPoint

Returns The center point of the Geometry::Annulus.

Returns:



14
15
16
# File 'lib/geometry/annulus.rb', line 14

def center
  @center
end

#diameter=(value) ⇒ Number

Returns the outer diameter.

Returns:

  • (Number)

    the outer diameter



42
43
44
# File 'lib/geometry/annulus.rb', line 42

def outer_diameter
    @outer_diameter || (@outer_radius && 2*@outer_radius)
end

#inner_diameterObject



18
19
20
# File 'lib/geometry/annulus.rb', line 18

def inner_diameter
    @inner_diameter || (@inner_radius && 2*@inner_radius)
end

#inner_radiusObject



24
25
26
# File 'lib/geometry/annulus.rb', line 24

def inner_radius
    @inner_radius || (@inner_diameter && @inner_diameter/2)
end

#maxPoint

Returns The upper right corner of the bounding Rectangle.

Returns:



72
73
74
# File 'lib/geometry/annulus.rb', line 72

def max
    @center+radius
end

#minPoint

Returns The lower left corner of the bounding Rectangle.

Returns:



78
79
80
# File 'lib/geometry/annulus.rb', line 78

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



84
85
86
# File 'lib/geometry/annulus.rb', line 84

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

#outer_diameterObject Also known as: diameter



30
31
32
# File 'lib/geometry/annulus.rb', line 30

def outer_diameter
    @outer_diameter || (@outer_radius && 2*@outer_radius)
end

#outer_radiusObject Also known as: radius



36
37
38
# File 'lib/geometry/annulus.rb', line 36

def outer_radius
    @outer_radius || (@outer_diameter && @outer_diameter/2)
end

#radius=(value) ⇒ Number

Returns the outer radius.

Returns:

  • (Number)

    the outer radius



46
47
48
# File 'lib/geometry/annulus.rb', line 46

def outer_radius
    @outer_radius || (@outer_diameter && @outer_diameter/2)
end