Class: Geometry::PointOne

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

Overview

An object repesenting a Point that is one unit away from the origin, along each axis, in N-dimensional space

A PointOne object is a Point that will always compare equal to one and unequal to everything else, regardless of size. It’s similar to the Null Object Pattern, but for ones.

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_one.rb', line 53

def x
    1
end

#yObject (readonly)



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

def y
    1
end

#zObject (readonly)



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

def z
    1
end

Instance Method Details

#*(other) ⇒ Object



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

def *(other)
    raise OperationNotDefined unless other.is_a? Numeric
    other
end

#+(other) ⇒ Object



82
83
84
85
86
87
88
89
90
91
92
93
94
95
# File 'lib/geometry/point_one.rb', line 82

def +(other)
    case other
	when Numeric
	    Point.iso(other + 1)
	when Size
	    Point[other.map {|a| a + 1 }]
	else
	    if other.respond_to?(:map)
		other.map {|a| a + 1 }
	    else
		Point[other + 1]
	    end
    end
end

#+@Object



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

def +@
    self
end

#-(other) ⇒ Object



97
98
99
100
101
102
103
104
105
106
107
# File 'lib/geometry/point_one.rb', line 97

def -(other)
    if other.is_a? Size
	Point[other.map {|a| 1 - a }]
    elsif other.respond_to? :map
	other.map {|a| 1 - a }
    elsif other == 1
	Point.zero
    else
	Point.iso(1 - other)
    end
end

#-@Object



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

def -@
    -1
end

#/(other) ⇒ Object



114
115
116
117
118
# File 'lib/geometry/point_one.rb', line 114

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

#[](i) ⇒ Numeric

Returns Element i (starting at 0).

Parameters:

Returns:

  • (Numeric)

    Element i (starting at 0)



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

def [](i)
    1
end

#coerce(other) ⇒ Object



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

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

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

Returns:

  • (Boolean)


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

def eql?(other)
    if other.respond_to? :all?
	other.all? {|e| e.eql? 1}
    else
	other == 1
    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



125
126
127
# File 'lib/geometry/point_one.rb', line 125

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

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

Returns:

  • (Boolean)


34
35
36
# File 'lib/geometry/point_one.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_one.rb', line 40

def to_ary
    []
end