Class: Osb::Vector2

Inherits:
Object
  • Object
show all
Defined in:
lib/osb/vector2.rb

Overview

Represents a 2d point or vector.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(x = 0, y = 0) ⇒ Vector2

Returns a new instance of Vector2.

Parameters:

  • x (Numeric, Array<Numeric>) (defaults to: 0)

    x coordinate of this vector, or an +Array+ of 2 Numeric values.

  • y (Numeric) (defaults to: 0)

    y coordinate of this vector



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/osb/vector2.rb', line 14

def initialize(x = 0, y = 0)
  Internal.assert_type!(x, [Numeric, Internal::T[Array][Numeric]], "x")
  Internal.assert_type!(y, Numeric, "y")

  if x.is_a?(Array)
    if x.size != 2
      raise InvalidValueError, "Must be an Array of 2 Numeric values."
    end
    @x = x[0]
    @y = x[1]
  else
    @x = x
    @y = y
  end
end

Instance Attribute Details

#xNumeric

Returns x coordinate of this vector.

Returns:

  • (Numeric)

    x coordinate of this vector



7
8
9
# File 'lib/osb/vector2.rb', line 7

def x
  @x
end

#yNumeric

Returns y coordinate of this vector.

Returns:

  • (Numeric)

    y coordinate of this vector



9
10
11
# File 'lib/osb/vector2.rb', line 9

def y
  @y
end

Instance Method Details

#!=(vector) ⇒ Boolean

Returns whether two 2d vector are not equal within tolerance

Parameters:

Returns:

  • (Boolean)


57
58
59
# File 'lib/osb/vector2.rb', line 57

def !=(vector)
  !(self == vector)
end

#+(vector) ⇒ Vector2

Add another 2d vector to this one.

Parameters:

Returns:



33
34
35
36
# File 'lib/osb/vector2.rb', line 33

def +(vector)
  Internal.assert_type!(vector, Vector2, "vector")
  Vector2.new(self.x + vector.x, self.y + vector.y)
end

#-(vector) ⇒ Vector2

Subtract another 2d vector from this one.

Parameters:

Returns:



41
42
43
44
# File 'lib/osb/vector2.rb', line 41

def -(vector)
  Internal.assert_type!(vector, Vector2, "vector")
  Vector2.new(self.x - vector.x, self.y - vector.y)
end

#==(vector) ⇒ Boolean

Returns whether two 2d vector are equal within tolerance

Parameters:

Returns:

  • (Boolean)


49
50
51
52
# File 'lib/osb/vector2.rb', line 49

def ==(vector)
  Internal.assert_type!(vector, Vector2, "vector")
  Math.fuzzy_equal(self.x, vector.x) && Math.fuzzy_equal(self.y, vector.y)
end

#cloneVector2

Makes a copy of this 2d vector.

Returns:



63
64
65
# File 'lib/osb/vector2.rb', line 63

def clone
  Vector2.new(self.x, self.y)
end

#lengthFloat

Returns the length of this 2d vector.

Returns:

  • (Float)


81
82
83
# File 'lib/osb/vector2.rb', line 81

def length
  Math.sqrt(self.x**2 + self.y**2)
end

#to_aArray(Float, Float)

Retrieves the coordinates in an Array.

Returns:

  • (Array(Float, Float))


69
70
71
# File 'lib/osb/vector2.rb', line 69

def to_a
  [self.x, self.y]
end

#to_sString

Returns a string representation of this 2d vector.

Returns:

  • (String)


75
76
77
# File 'lib/osb/vector2.rb', line 75

def to_s
  self.to_a.to_s
end