Class: Geometry::PointZero
- Inherits:
-
Object
- Object
- Geometry::PointZero
- 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
- #x ⇒ Object readonly
- #y ⇒ Object readonly
- #z ⇒ Object readonly
Accessors collapse
-
#[](i) ⇒ Numeric
Element i (starting at 0).
Unary operators collapse
Enumerable collapse
-
#first(n = nil) ⇒ Object
Return the first, or first n, elements (always 0).
Instance Method Summary collapse
- #*(other) ⇒ Object
- #+(other) ⇒ Object
- #-(other) ⇒ Object
- #/(other) ⇒ Object
- #coerce(other) ⇒ Object
- #eql?(other) ⇒ Boolean (also: #==)
- #is_a?(klass) ⇒ Boolean (also: #kind_of?)
-
#to_ary ⇒ Object
This is a hack to get Array#== to work properly.
Instance Attribute Details
#x ⇒ Object (readonly)
53 54 55 |
# File 'lib/geometry/point_zero.rb', line 53 def x 0 end |
#y ⇒ Object (readonly)
59 60 61 |
# File 'lib/geometry/point_zero.rb', line 59 def y 0 end |
#z ⇒ Object (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).
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: ==
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)
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?
34 35 36 |
# File 'lib/geometry/point_zero.rb', line 34 def is_a?(klass) (klass == Point) || super end |
#to_ary ⇒ Object
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 |