Class: Bivector
- Inherits:
-
Object
- Object
- Bivector
- Defined in:
- lib/bivector.rb
Instance Attribute Summary collapse
-
#x ⇒ Object
Returns the value of attribute x.
-
#y ⇒ Object
Returns the value of attribute y.
Instance Method Summary collapse
- #*(aNumber) ⇒ Object
- #+(another) ⇒ Object
- #-(another) ⇒ Object
- #==(another) ⇒ Object
- #angles_to(another, style = :rad) ⇒ Object
- #cross_product(another) ⇒ Object (also: #outer_product)
- #dot_product(another) ⇒ Object (also: #inner_product)
-
#initialize(xCoordinate, yCoordinate) ⇒ Bivector
constructor
A new instance of Bivector.
- #norm ⇒ Object (also: #length)
- #parallels_to?(another) ⇒ Boolean
- #perpendicular_to?(another) ⇒ Boolean
- #polar ⇒ Object
- #theta(style = :rad) ⇒ Object
- #to_s ⇒ Object
- #unit_vector ⇒ Object
- #zero? ⇒ Boolean (also: #zero_vector?, #null_vector?)
Constructor Details
#initialize(xCoordinate, yCoordinate) ⇒ Bivector
Returns a new instance of Bivector.
4 5 6 |
# File 'lib/bivector.rb', line 4 def initialize(xCoordinate, yCoordinate) @x, @y = xCoordinate, yCoordinate end |
Instance Attribute Details
#x ⇒ Object
Returns the value of attribute x.
2 3 4 |
# File 'lib/bivector.rb', line 2 def x @x end |
#y ⇒ Object
Returns the value of attribute y.
2 3 4 |
# File 'lib/bivector.rb', line 2 def y @y end |
Instance Method Details
#*(aNumber) ⇒ Object
28 29 30 31 32 |
# File 'lib/bivector.rb', line 28 def *(aNumber) if aNumber.is_a? Numeric Bivector.new(x * aNumber, y * aNumber) end end |
#+(another) ⇒ Object
16 17 18 19 20 |
# File 'lib/bivector.rb', line 16 def +(another) if another.is_a? Bivector Bivector.new(x + another.x, y + another.y) end end |
#-(another) ⇒ Object
22 23 24 25 26 |
# File 'lib/bivector.rb', line 22 def -(another) if another.is_a? Bivector Bivector.new(x - another.x, y - another.y) end end |
#==(another) ⇒ Object
12 13 14 |
# File 'lib/bivector.rb', line 12 def ==(another) another.is_a?(Bivector) && x == another.x && y == another.y end |
#angles_to(another, style = :rad) ⇒ Object
64 65 66 67 68 |
# File 'lib/bivector.rb', line 64 def angles_to(another, style = :rad) if another.is_a? Bivector BV::Angle.new(Math.acos(dot_product(another) / ( norm * another.norm))).values_in(style) end end |
#cross_product(another) ⇒ Object Also known as: outer_product
52 53 54 55 56 |
# File 'lib/bivector.rb', line 52 def cross_product(another) if another.is_a? Bivector Bivector.new() end end |
#dot_product(another) ⇒ Object Also known as: inner_product
45 46 47 48 49 |
# File 'lib/bivector.rb', line 45 def dot_product(another) if another.is_a? Bivector x * another.x + y * another.y end end |
#norm ⇒ Object Also known as: length
34 35 36 |
# File 'lib/bivector.rb', line 34 def norm (x**2 + y**2)**0.5 end |
#parallels_to?(another) ⇒ Boolean
70 71 72 73 74 |
# File 'lib/bivector.rb', line 70 def parallels_to?(another) if another.is_a? Bivector self.zero? || another.zero? || x * another.y - y * another.x == 0 end end |
#perpendicular_to?(another) ⇒ Boolean
76 77 78 79 80 |
# File 'lib/bivector.rb', line 76 def perpendicular_to?(another) if another.is_a? Bivector self.dot_product(another) == 0 end end |
#polar ⇒ Object
86 87 88 |
# File 'lib/bivector.rb', line 86 def polar "(#{norm}, #{theta})" end |
#theta(style = :rad) ⇒ Object
82 83 84 |
# File 'lib/bivector.rb', line 82 def theta(style = :rad) BV::Angle.new(Math.atan(y/x)).values_in(style) end |
#to_s ⇒ Object
8 9 10 |
# File 'lib/bivector.rb', line 8 def to_s "(#{x}, #{y})" end |
#unit_vector ⇒ Object
59 60 61 62 |
# File 'lib/bivector.rb', line 59 def unit_vector return nil if self.zero? Bivector.new(x / norm, y / norm) end |
#zero? ⇒ Boolean Also known as: zero_vector?, null_vector?
39 40 41 |
# File 'lib/bivector.rb', line 39 def zero? return (x == 0 && y ==0) ? true : false end |