# class Vector

Cuby's implementation of vector algebra and basic 3D geometry
in Vector class.

Access to the object can be locked using Locking module,
all methods are locked

This is pure ruby implementation, in contrast to math_vector which uses
binary library. It is intended as a replacement where the performance
is not crucial, but portability is.

###
Initializators

self.from_array(array) # new instance of the class

Creates new vector from array

v1 = Vector.from_array([1.0, 0.0, 0.0])
v2 = Vector.from_array(some_array)

self.of_size(size,fill=0.0) # new instance of the class

Creates new vector of given size filled with number fill

Vector.of_size(5,1.0)
=> Vector: [1.0,1.0,1.0,1.0,1.0]

self.zero(size) # new instance of the class

Creates new vector of given size filled with zeroes

Vector.of_size(5)
=> Vector: [0.0,0.0,0.0,0.0,0.0]

###
Basics

size # Fixnum

Returns size of the vector

Vector[1.0, 0.0, 0.0].size
=> 3

deep_copy # Vector

deep copy

###
Element access

[](index) # Float

Returns selected element

[]=(index,value) # Float (value written)

Write to selected element

subvector(first, size) # => Vector

###
Type conversion

to_a # Array of Floats

Converts Vector to Array

to_matrix # Matrix

Converts Vector to column Matrix

###
Iterators

###
Unary operators

###
Operators: vector - vector

+(vector) # Vector

Vector addition

-(vector) # Vector

Vector subtraction

plus!(vector) # nil

In-place vector addition, faster than using a = a + b

minus!(vector) # nil

In-place vector subtraction, faster than using a = a - b

dot(vector) # Float

Dot product, synonym to dot_product

elementwise_multiply(vector) # => Vector

elementwise_divide(vector) # => Vector

###
Operators: vector - something else

comutative_multiply(operand)

this method is equivalent to * operator, but is used by the
numerical types extension found in algebra.rb

###
Comparison

== (vector) # true | false

=~ (vector) # true | false

Loose comparison of two vectors, element by element. Max. allowed
error is stored in class variable, accessible by methods
self.epsilon and self.epsilon= .

###
Misc

abs # Float

Absolute value (size) of vector

normalize # Vector

Returns normalized vector

normalize! # nil

In-place version of normalize