#include <TooN/toon.h>
Public Types | |
typedef Base::template VLayout < Size, Precision > ::PointerType | PointerType |
Public Member Functions | |
Comparison | |
template<int Size2, class Precision2 , class Base2 > | |
bool | operator!= (const Vector< Size2, Precision2, Base2 > &rhs) |
Test for inequality with another vector. | |
template<int Size2, class Precision2 , class Base2 > | |
bool | operator== (const Vector< Size2, Precision2, Base2 > &rhs) |
Test for equality with another vector. | |
Operators on the vector | |
Vector & | operator*= (const Precision &rhs) |
multiply this vector by a constant | |
template<class Op > | |
Vector & | operator+= (const Operator< Op > &op) |
template<int Size2, class Precision2 , class Base2 > | |
Vector & | operator+= (const Vector< Size2, Precision2, Base2 > &rhs) |
add another vector onto this one | |
template<int Size2, class Precision2 , class Base2 > | |
Vector & | operator-= (const Vector< Size2, Precision2, Base2 > &rhs) |
subtract another vector from this one | |
template<class Op > | |
Vector & | operator-= (const Operator< Op > &op) |
Vector & | operator/= (const Precision &rhs) |
divide this vector by a constant | |
Assignment | |
template<class Op > | |
Vector & | operator= (const Operator< Op > &op) |
template<int Size2, typename Precision2 , typename Base2 > | |
Vector< Size, Precision, Base > & | operator= (const Vector< Size2, Precision2, Base2 > &from) |
Vector & | operator= (const Vector &from) |
Misc | |
Vector & | ref () |
return me as a non const reference - useful for temporaries | |
Constructors | |
template<int Size2, typename Precision2 , typename Base2 > | |
Vector (const Vector< Size2, Precision2, Base2 > &from) | |
constructor from arbitrary vector | |
template<class Op > | |
Vector (const Operator< Op > &op) | |
Vector (PointerType data_in, int size_in, int stride_in, Internal::Slicing) | |
internal constructor | |
Vector (PointerType data, int size_in) | |
Vector (PointerType data) | |
Vector (int size_in) | |
Vector () |
A vector. Support is provided for all the usual vector operations:
See individual member function documentation for examples of usage.
The library provides classes for both statically- and dynamically-sized vectors. If you know what dimension of vector you're going to use (e.g. 3 to represent a point in 3D space), it's more efficient to statically sized vectors. The size of static vectors is determined at compile time; that of dynamically-sized vectors at run-time.
To create a 3-dimensional vector, use:
Vector<3> v;
and to create a vector of some other dimensionality just replace 3 with the positive integer of your choice, or some expression which the compiler can evaluate to an integer at compile time.
The preferred way of initialising a vector is to use makeVector. The makeVector function constructs a static vector initialised to the size and the contents of the comma-separated list of argments. The makeVector vectors are real Vectors and so can be used anywhere where a vector is needed, not just in initialisations. For example
// Create a vector initialised to [1 2 3]; Vector<3> v = makeVector(1, 2, 3); // Calculate the dot product with the vector [4 0 6] double dot = v * makeVector(4, 0, 6);
Because the make_Vector syntax creates actual vectors, compile-time checking is done to ensure that all vectors defined in this way have the correct number of elements.
To create a dynamically sized vector, use:
Vector<> v(size);
where size is an integer which will be evaluated at run time.
Vector<> is actually a synonym for Vector<Dynamic> which is Vector<-1> being a template specialisation of Vector<N> with a special implementation that allows the size to be determined at runtime.
This library makes no distinction between row vectors and column vectors. Vectors that appear on the left of a multiplication are treated as row vectors while those that appear on the right are treated as column vectors (thus v1*v2
means the dot product). This means that sometimes you have to be careful to include prarentheses since it is possible to write obscure stuff like
Vector<4> v4 = v1 * v2 * v3;
which in the absence of any extra parentheses means 'compute the dot product between v1
and v2
and then multiply v3
by this scalar and assign to v4
'.
If the row-column distinction is important, then vectors can be turned into matrices with one row or column by using as_row() or as_col():
double d[3] = {1,2,3}; Vector<3> v(d); Matrix<3,3> M = v.as_col() * v.as_row(); // creates a symmetric rank 1 matrix from v
Definition at line 128 of file vector.hh.
typedef Base::template VLayout<Size, Precision>::PointerType TooN::Vector< Size, Precision, Base >::PointerType |
TooN::Vector< Size, Precision, Base >::Vector | ( | ) | [inline] |
Default constructor for vectors. For fixed-sized vectors, this does nothing, i.e. does not guarantee to initialise the vector to any particular values. For dynamically sized vectors, this sets the vector to have a length of 0 which renders the vector useless because vectors can't be resized
TooN::Vector< Size, Precision, Base >::Vector | ( | int | size_in | ) | [inline, explicit] |
TooN::Vector< Size, Precision, Base >::Vector | ( | PointerType | data | ) | [inline, explicit] |
TooN::Vector< Size, Precision, Base >::Vector | ( | PointerType | data, | |
int | size_in | |||
) | [inline] |
TooN::Vector< Size, Precision, Base >::Vector | ( | PointerType | data_in, | |
int | size_in, | |||
int | stride_in, | |||
Internal::Slicing | ||||
) | [inline] |
TooN::Vector< Size, Precision, Base >::Vector | ( | const Operator< Op > & | op | ) | [inline] |
TooN::Vector< Size, Precision, Base >::Vector | ( | const Vector< Size2, Precision2, Base2 > & | from | ) | [inline] |
bool TooN::Vector< Size, Precision, Base >::operator!= | ( | const Vector< Size2, Precision2, Base2 > & | rhs | ) | [inline] |
Vector& TooN::Vector< Size, Precision, Base >::operator*= | ( | const Precision & | rhs | ) | [inline] |
Vector& TooN::Vector< Size, Precision, Base >::operator+= | ( | const Operator< Op > & | op | ) | [inline] |
Vector& TooN::Vector< Size, Precision, Base >::operator+= | ( | const Vector< Size2, Precision2, Base2 > & | rhs | ) | [inline] |
Vector& TooN::Vector< Size, Precision, Base >::operator-= | ( | const Vector< Size2, Precision2, Base2 > & | rhs | ) | [inline] |
Vector& TooN::Vector< Size, Precision, Base >::operator-= | ( | const Operator< Op > & | op | ) | [inline] |
Vector& TooN::Vector< Size, Precision, Base >::operator/= | ( | const Precision & | rhs | ) | [inline] |
Vector& TooN::Vector< Size, Precision, Base >::operator= | ( | const Operator< Op > & | op | ) | [inline] |
Vector<Size,Precision,Base >& TooN::Vector< Size, Precision, Base >::operator= | ( | const Vector< Size2, Precision2, Base2 > & | from | ) | [inline] |
Vector& TooN::Vector< Size, Precision, Base >::operator= | ( | const Vector< Size, Precision, Base > & | from | ) | [inline] |
bool TooN::Vector< Size, Precision, Base >::operator== | ( | const Vector< Size2, Precision2, Base2 > & | rhs | ) | [inline] |
Vector& TooN::Vector< Size, Precision, Base >::ref | ( | ) | [inline] |