Class: Geometry::PointZero

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

Overview

An object repesenting a Point at the origin in N-dimensional space

A PointZero object is a Point that will always compare equal to zero and unequal to everything else, regardless of size. You can think of it as an application of the Null Object Pattern.

Accessors collapse

Accessors collapse

Unary operators collapse

Enumerable collapse

Instance Method Summary collapse

Instance Attribute Details

#xObject (readonly)



53
54
55
# File 'lib/geometry/point_zero.rb', line 53

def x
    0
end

#yObject (readonly)



59
60
61
# File 'lib/geometry/point_zero.rb', line 59

def y
    0
end

#zObject (readonly)



65
66
67
# File 'lib/geometry/point_zero.rb', line 65

def z
    0
end

Instance Method Details

#*(other) ⇒ Object



104
105
106
# File 'lib/geometry/point_zero.rb', line 104

def *(other)
    self
end

#+(other) ⇒ Object



82
83
84
85
86
87
88
89
90
# File 'lib/geometry/point_zero.rb', line 82

def +(other)
    case other
	when Array then other
	when Numeric
	    Point.iso(other)
	else
	    Point[other]
    end
end

#+@Object



73
74
75
# File 'lib/geometry/point_zero.rb', line 73

def +@
    self
end

#-(other) ⇒ Object



92
93
94
95
96
97
98
99
100
101
102
# File 'lib/geometry/point_zero.rb', line 92

def -(other)
    if other.is_a? Size
	-Point[other]
    elsif other.is_a? Numeric
	Point.iso(-other)
    elsif other.respond_to? :-@
	-other
    elsif other.respond_to? :map
	other.map {|a| -a }
    end
end

#-@Object



77
78
79
# File 'lib/geometry/point_zero.rb', line 77

def -@
    self
end

#/(other) ⇒ Object



108
109
110
111
112
# File 'lib/geometry/point_zero.rb', line 108

def /(other)
    raise OperationNotDefined unless other.is_a? Numeric
    raise ZeroDivisionError if 0 == other
    self
end

#[](i) ⇒ Numeric

Returns Element i (starting at 0).

Parameters:

Returns:

  • (Numeric)

    Element i (starting at 0)



47
48
49
# File 'lib/geometry/point_zero.rb', line 47

def [](i)
    0
end

#coerce(other) ⇒ Object



22
23
24
25
26
27
28
29
30
31
32
# File 'lib/geometry/point_zero.rb', line 22

def coerce(other)
    if other.is_a? Numeric
	[other, 0]
    elsif other.is_a? Array
	[other, Array.new(other.size,0)]
    elsif other.is_a? Vector
	[other, Vector[*Array.new(other.size,0)]]
    else
	[Point[other], Point[Array.new(other.size,0)]]
    end
end

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

Returns:

  • (Boolean)


13
14
15
16
17
18
19
# File 'lib/geometry/point_zero.rb', line 13

def eql?(other)
    if other.respond_to? :all?
	other.all? {|e| e.eql? 0}
    else
	other == 0
    end
end

#first(n = nil) ⇒ Object

Return the first, or first n, elements (always 0)

Parameters:

  • n (Number) (defaults to: nil)

    the number of elements to return



119
120
121
# File 'lib/geometry/point_zero.rb', line 119

def first(n=nil)
    Array.new(n, 0) rescue 0
end

#is_a?(klass) ⇒ Boolean Also known as: kind_of?

Returns:

  • (Boolean)


34
35
36
# File 'lib/geometry/point_zero.rb', line 34

def is_a?(klass)
    (klass == Point) || super
end

#to_aryObject

This is a hack to get Array#== to work properly. It works on ruby 2.0 and 1.9.3.



40
41
42
# File 'lib/geometry/point_zero.rb', line 40

def to_ary
    []
end