40     typedef const T&       const_reference;
 
   41     typedef std::size_t    size_type;
 
   42         typedef std::ptrdiff_t difference_type;
 
   44         typedef const T*       const_pointer;
 
   47     typedef const T*       const_iterator;
 
   50         typedef std::reverse_iterator<iterator> reverse_iterator;
 
   51         typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
 
   63         const_iterator begin()
 const 
   68         const_iterator end()
 const 
   73         reverse_iterator rbegin()
 
   75                 return reverse_iterator(end());
 
   78         reverse_iterator rend()
 
   80                 return reverse_iterator(begin());
 
   83         const_reverse_iterator rbegin()
 const 
   85                 return const_reverse_iterator(end());
 
   88         const_reverse_iterator rend()
 const 
   90                 return const_reverse_iterator(begin());
 
  117         explicit vec(
unsigned dim, 
const T& value = T(0))
 
  148                         _data = 
new T[v.size()];
 
  157         template <
typename S>
 
  162                         _data = 
new T[v.size()];
 
  163                         for(
unsigned i = 0; i < 
_size;i++)
 
  172         vec(
const T& c0, 
const T& c1)
 
  183         vec(
const T& c0, 
const T& c1, 
const T& c2)
 
  194         vec(
const T& c0, 
const T& c1, 
const T& c2, 
const T& c3)
 
  206         void set(
const T& c0, 
const T& c1) 
 
  214         void set(
const T& c0, 
const T& c1, 
const T& c2) 
 
  223         void set(
const T& c0, 
const T& c1, 
const T& c2, 
const T& c3) 
 
  262         operator const T*() 
const 
  273                         if (
size() != v.size())
 
  288         template <
typename S> 
 
  292                 for (
unsigned i=0;i<
_size;++i) 
_data[i]=(T)v(i); 
 
  399                  for (
unsigned i=0;i<
_size;++i) 
 
  407                 for (
unsigned i=0;i<
_size; ++i) 
 
  415                 for (
unsigned i=0;i<
_size;++i) 
_data[i] *= s; 
return *
this; 
 
  421                 for (
unsigned i=0;i<
_size;++i) 
_data[i] /= s; 
return *
this; 
 
  425         template <
typename S> 
 
  428                 assert(
_size == v._size);
 
  429                 for (
unsigned i=0;i<
_size;++i) 
_data[i] += v(i); 
return *
this; 
 
  433         template <
typename S> 
 
  436                 assert(
_size == v._size);
 
  437                 for (
unsigned i=0;i<
_size;++i) 
_data[i] -= v(i); 
return *
this; 
 
  441         template <
typename S> 
 
  444                 assert(
_size == v._size);
 
  445                  for (
unsigned i=0;i<
_size;++i) 
_data[i] *= v(i); 
return *
this; 
 
  449         template <
typename S> 
 
  452                 assert(
_size == v._size);
 
  453                  for (
unsigned i=0;i<
_size;++i) 
_data[i] /= v(i); 
return *
this; 
 
  457         template <
typename S> 
 
  460                 vec<T> r = *
this; r += v; 
return r; 
 
  466                 vec<T> r = *
this; r += s; 
return r; 
 
  472                 vec<T> r = *
this; r -= s; 
return r; 
 
  476         template <
typename S> 
 
  479                  vec<T> r = *
this; r -= v; 
return r; 
 
  483         template <
typename S> 
 
  486                 vec<T> r = *
this; r *= v; 
return r; 
 
  491         template <
typename S> 
 
  494                 vec<T> r = *
this; r /= v; 
return r; 
 
  510                  vec<T> r = *
this; r *= s; 
return r; 
 
  526                 for (
unsigned i=0; i<
_size; ++i) 
 
  584         template <
typename S> 
 
  587                 for (
unsigned i=0;i<
_size;++i) 
 
  588                         if(
operator()(i) != (T)v(i)) 
return false; 
 
  593         template <
typename S> 
 
  596                 for (
unsigned i=0;i<
_size;++i) 
 
  597                         if(
operator()(i) != (T)v(i)) 
return true; 
 
  610                 if(std::numeric_limits<T>::is_signed)
 
  612                         for(
unsigned i = 0; i < 
_size;i++)
 
  620                 for(
unsigned i = 0; i < 
_size;i++)
 
  627                 for(
unsigned i = 0; i < 
_size;i++)
 
  634                 for(
unsigned i = 0; i < 
_size;i++)
 
  643                 for(
unsigned i = 0; i!=
_size;i++)
 
  644                         l+= 
operator()(i)*
operator()(i);
 
  652                 for(
unsigned i = 0; i<
_size; i++)
 
  653                          operator()(i)=l*
operator()(i);
 
  662                 for(
unsigned i = 0; i < 
size; i++)
 
  671                 assert(subvec.size() == s); 
 
  672                 assert(ifrom+s <=
size());
 
  674                 for(
unsigned i = 0; i < s; i++)
 
  682                 assert(ifrom+v.size() <= 
size());
 
  683                 for(
unsigned i = 0; i < v.size(); i++)
 
  684                                 operator()(i+ifrom) = v(i);             
 
  702 template <
typename T,
typename S>
 
  706         unsigned N = values.size();
 
  710         for(
unsigned i = 0; i < N;i++)
 
  712                 n+=pow(fabs(values(i)),(T)p);
 
  715         return pow(n,(T)(1.0/(T)p));
 
  719 template <
typename T>
 
  739         return v.sqr_length();
 
  747         for (
unsigned i=0;i<v.size()-1;++i)
 
  751         out << v(v.size()-1);
 
  761         for (
unsigned i=0;i<v.size();++i)
 
  772 template <
typename T>
 
  775         vec<T> r = v; r *= s; 
return r; 
 
  779 template <
typename T>
 
  783         for (
unsigned i=0;i<v.size();++i) r += v(i)*(T)w(i); 
 
  788 template < 
typename T>
 
  792         r(0)=  v(1)*(T)w(2) - v(2)*(T)w(1);
 
  793         r(1)= -v(0)*(T)w(2) + v(2)*(T)w(0);
 
  794         r(2)=  v(0)*(T)w(1) - v(1)*(T)w(0);
 
  799 template < 
typename T, 
typename S, 
typename U>
 
  802         return dot(a,c)*b - 
dot(a,b)*c;
 
  806 template < 
typename T, 
typename S, 
typename U>
 
  813 template <
typename T>
 
  816         return dot(v,n)/
dot(n,n)*n;
 
  821 template <
typename T>
 
  824         return v-(T)2.0*
dot(v,n)/
dot(n,n)*n;
 
  829 template <
typename T>
 
  833         T NdotV =-
dot(n,v)/
dot(n,n);
 
  836         T cosasqr = (T)1.0-(c*c)*((T)1.0-NdotV*NdotV);
 
  842                         *total_reflection=
true;
 
  848                         *total_reflection=
false;
 
  849                 return  c*v + (c*NdotV - sqrt(cosasqr)/
dot(n,n) )*n;
 
  858 template <
typename T>
 
  867 template <
typename T>
 
  877 template <
typename T>
 
  881         for(
unsigned i = 0; i < v.size();i++)
 
  889 template <
typename T>
 
  893         for(
unsigned i = 0; i < v.size();i++)
 
  900 template <
typename T>
 
  904         for(
unsigned i = 0; i < v.size();i++)
 
  912 template <
typename T>
 
  916         for(
unsigned i = 0; i < v.size();i++)
 
  923 template <
typename T>
 
  926         return *(std::min_element(&v(0),&v(v.size()-1)+1));
 
  932 template <
typename T>
 
  935         return (
unsigned) (std::min_element(&v(0),&v(v.size()-1)+1)-&v(0));
 
  939 template <
typename T>
 
  942         return (
unsigned) (std::max_element(&v(0),&v(v.size()-1)+1)-&v(0));
 
  946 template <
typename T>
 
  949         return *(std::max_element(&v(0),&v(v.size()-1)+1));
 
  958         unsigned N = values.size();
 
  962         for(
unsigned i = 0; i < N;i++)
 
  975         unsigned N = values.size();     
 
  980         for(
unsigned i = 0; i < N;i++)
 
  982                 v+=(values(i)-mu)*(values(i)-mu);       
 
 1000 template<
typename T>
 
 1009 template<
typename T>
 
 1020 template<
typename T>
 
 1024         unsigned N = values.size();     
 
 1027         for(
unsigned i = 0; i < N;i++)
 
 1034         for(
unsigned i = 0; i < N;i++)
 
 1036                 var+=sqr(values(i)-mu); 
 
 1044 template <
typename T>
 
 1049                 std::sort(&values(0),&values(values.size()-1)+1,std::less<T>());
 
 1051                 std::sort(&values(0),&values(values.size()-1)+1,std::greater<T>());
 
 1057 template <
typename T>
 
 1061         for(
unsigned i = 0; i < values.size(); i++)
 
 1069 template <
typename T>
 
 1072         cumsumvalues.resize(values.size());
 
 1074         for(
unsigned i = 0; i < values.size(); i++)
 
 1085 template <
typename T>
 
 1089         for(
unsigned i = 0; i < values.size(); i++)
 
 1099 template <
typename T>
 
 1102         if (k >= values.size())
 
 1103                 k = values.size()-1;
 
 1104         std::nth_element(&values(0),&values(k),&values(values.size()-1)+1);
 
 1115 template <
typename T>
 
 1124 template <
typename T>
 
 1134 template <
typename T>
 
 1143         T diff = last_val-first_val;
 
 1145         for(
unsigned i = 0; i < N; i++)
 
 1147                 lv(i) = first_val + i*diff/((T)N-(T)1.0);
 
 1153 template <
typename T>
 
 1154 const vec<T>  cheb_points(
const T& first_val, 
const T& last_val,
unsigned N=10)
 
 1159                 lv(0) = (T)(first_val+last_val)/2.0;
 
 1162         T diff = (last_val-first_val)/(T)2.0;
 
 1164         for(
unsigned i = 0; i < N; i++)
 
 1166                 lv(i) =  diff*((first_val+1.0)-cos((T)((2*i+1)*3.14159)/((T)(2.0*(N-1)+2))));
 
 1175 template <
typename T>
 
 1182                 lv(0) = pow((T)10.0,last_pow_of_10);
 
 1185         T diff = last_pow_of_10 - first_pow_of_10;
 
 1187         for(
unsigned i = 0; i < N; i++)
 
 1189                 lv(i) = pow((T)10.0,(T)first_pow_of_10 + (T)i*diff/((T)N-(T)1.0));
 
 1197 template <
typename T>
 
 1200         return (1-t)*v1+t*v2;
 
 1206 template <
typename T>
 
 1207 const T 
lerp(
const T& s1, 
const T& s2, T t)
 
 1209         return (1-t)*s1+t*s2;
 
 1215 template <
typename T>
 
 1218         T dotv0v1 = 
dot(v0,v1);
 
 1226         T theta = acos(dotv0v1)*t;
 
 1228         return cos(theta)*v0 + sin(theta)*v2;
 
  
 
vec(unsigned dim, const T &value=T(0))
creates a vector with dim elements
Definition: vec.h:117
vec< T > refract(const vec< T > &v, const vec< T > &n, T c1, T c2, bool *total_reflection=NULL)
Definition: vec.h:830
T & w()
element accessor for the fourth element
Definition: vec.h:383
vec(const T &c0, const T &c1, const T &c2, const T &c3)
creates a 4d vector (c0,c1,c2,c3)^T
Definition: vec.h:194
T cumsum_values(const vec< T > &values, vec< T > &cumsumvalues)
Definition: vec.h:1070
T & z()
element accessor for the third element
Definition: vec.h:369
void resize(unsigned dim)
resize the vector
Definition: vec.h:557
vec< T > & operator/=(const T &s)
in place division by scalar s
Definition: vec.h:419
T & operator()(unsigned i)
element accessor
Definition: vec.h:297
virtual ~vec()
destructor
Definition: vec.h:240
const vec< T > lin_space(const T &first_val, const T &last_val, unsigned N=10)
create a linearly spaced vector with N values starting at first_val and ending ant last_val
Definition: vec.h:1135
T var_value(const vec< T > &values)
Definition: vec.h:973
const T & w() const
const element accessor for the fourth element
Definition: vec.h:390
T length() const
length of the vector L2-Norm
Definition: vec.h:602
vec< T > sub_vec(unsigned ifrom, unsigned size) const
extracts sub vector beginning at index ifrom with given size
Definition: vec.h:657
fvec< T, N > cross(const fvec< T, N > &v, const fvec< T, N > &w)
returns the cross product of vector v and w
Definition: fvec.h:338
void set(const T &c0, const T &c1)
set entries of a 2d vector
Definition: vec.h:206
fvec< T, N > round(const fvec< T, N > &v)
apply round function component wise to vector
Definition: fvec.h:318
const T & z() const
const element accessor for the third element
Definition: vec.h:376
void paste(unsigned ifrom, const vec< T > &v)
paste v into vector beginning at index pos ifrom
Definition: vec.h:679
vec(const vec< T > &v)
copy constructor for vectors with equal element type
Definition: vec.h:144
const vec< T > operator+(const vec< S > &v) const
vector addition
Definition: vec.h:458
T * _data
pointer to _data storage
Definition: vec.h:32
void floor()
floor componentwise
Definition: vec.h:625
T std_value(const vec< T > &values)
Definition: vec.h:1010
void set_extern_data(unsigned dim, T *data)
set data pointer to an external data array
Definition: vec.h:232
void set(const T &c0, const T &c1, const T &c2)
set entries of a 3d vector
Definition: vec.h:214
vec(unsigned dim, const T *marray)
creates a vector with dim elements from an array
Definition: vec.h:131
A column vector class.
Definition: fvec.h:13
vec< T > & operator+=(const T &s)
in place addition of a scalar s
Definition: vec.h:397
T mad_value(const vec< T > &values)
compute the median absolut deviation MAD
Definition: vec.h:1001
const T & last() const
const element accessor for the last element
Definition: vec.h:334
vec< T > & operator-=(const T &s)
in place subtraction by scalar s
Definition: vec.h:405
vec(const T &c0, const T &c1)
creates a 3d vector (c0,c1,c2)^T
Definition: vec.h:172
unsigned size() const
number of elements
Definition: vec.h:97
void zeros(unsigned n)
resize the vector to size n and fills the vector with zeros
Definition: vec.h:543
void ones()
fill the vector with ones
Definition: vec.h:537
T p_norm(const vec< T > &values, const S &p=1)
return the p-norm of the vector default is p == 1
Definition: vec.h:703
void copy(unsigned ifrom, unsigned s, vec< T > &subvec) const
copy sub vector beginning at index ifrom with given size s into subvec
Definition: vec.h:669
const T & first() const
const element accessor for the first element
Definition: vec.h:318
T range_value(const vec< T > &values)
compute the range of all values
Definition: vec.h:994
fvec< T, N > floor(const fvec< T, N > &v)
apply floor function component wise to vector
Definition: fvec.h:322
void var_and_mean_value(const vec< T > &values, T &mu, T &var)
compute the mean and the variance (sigma^2) of all values
Definition: vec.h:1021
void normalize()
normalize the vector using the L2-Norm
Definition: vec.h:649
T & last()
element accessor for the flast element
Definition: vec.h:327
vec< T > project(const vec< T > &v, const vec< T > &n)
calculates the projection of v onto n
Definition: vec.h:814
std::ostream & operator<<(std::ostream &out, const diag_mat< T > &m)
output of a diagonal matrix onto an ostream
Definition: diag_mat.h:442
T mean_value(const vec< T > &values)
compute the mean of all values
Definition: vec.h:955
unsigned max_index(const fvec< T, N > &v)
return the index of the largest entry
Definition: fvec.h:374
fvec< T, N > abs(const fvec< T, N > &v)
apply abs function component wise to vector
Definition: fvec.h:314
vec< T > & operator=(const vec< T > &v)
assignment of a vector v
Definition: vec.h:268
vec(const vec< S > &v)
copy constructor for vectors with different element type
Definition: vec.h:158
T sqr_length() const
square length of vector
Definition: vec.h:640
bool data_is_external
store whether data is not owned by vector
Definition: vec.h:36
void round()
round componentwise
Definition: vec.h:632
T & x()
element accessor for the first element
Definition: vec.h:341
const fmat< T, N, M > lerp(const fmat< T, N, M > &m1, const fmat< T, N, M > &m2, T t)
linear interpolation returns (1-t)*m1 + t*m2
Definition: fmat.h:259
unsigned dim() const
number of elements
Definition: vec.h:103
void fill(const T &v)
fill elements of vector with scalar v
Definition: vec.h:524
T min_value(const fvec< T, N > &v)
returns the minimal entry
Definition: fvec.h:360
fvec< T, N > ceil(const fvec< T, N > &v)
apply ceil function component wise to vector
Definition: fvec.h:326
T sqr_length(const fvec< T, N > &v)
returns the squared length of vector v
Definition: fvec.h:330
void sort_values(vec< T > &values, bool ascending=true)
sort vector elements in ascending or descending order
Definition: vec.h:1045
std::istream & operator>>(std::istream &in, diag_mat< T > &m)
input of a diagonal matrix from an istream
Definition: diag_mat.h:453
void ones(unsigned n)
resize the vector to size n and fills thevector with ones
Definition: vec.h:550
T select_median_value(vec< T > &values)
Definition: vec.h:1116
void zeros()
fill the vector with zeros
Definition: vec.h:531
const vec< T > log_space(const T &first_pow_of_10, const T &last_pow_of_10, unsigned N=10)
Definition: vec.h:1176
T max_value(const fvec< T, N > &v)
return the value of the largest entry
Definition: fvec.h:381
T sum_values(const vec< T > &values)
returns the sum of all entries
Definition: vec.h:1058
void abs()
componentwise absolute values
Definition: vec.h:608
vec< T > reflect(const vec< T > &v, const vec< T > &n)
calculates the reflected direction of v; n is the normal of the reflecting surface
Definition: vec.h:822
void set(const T &c0, const T &c1, const T &c2, const T &c3)
set entries of a 4d vector
Definition: vec.h:223
const vec< T > operator/(const vec< S > &v) const
componentwise vector division
Definition: vec.h:492
const T & y() const
const element accessor for the second element
Definition: vec.h:362
T prod_values(vec< T > &values)
returns the product of all entries
Definition: vec.h:1086
const T & x() const
const element accessor for the first element
Definition: vec.h:348
T dot(const fvec< T, N > &v, const fvec< T, N > &w)
returns the dot product of vector v and w
Definition: fvec.h:300
vec(const T &c0, const T &c1, const T &c2)
creates a 3d vector (c0,c1,c2)^T
Definition: vec.h:183
vec< T > & operator*=(const T &s)
in place multiplication with s
Definition: vec.h:413
const vec< T > slerp(const vec< T > &v0, const vec< T > &v1, T t)
spherical linear interpolation
Definition: vec.h:1216
bool operator!=(const vec< S > &v) const
test for inequality
Definition: vec.h:594
vec()
standard constructor
Definition: vec.h:109
const vec< T > operator*(const vec< S > &v) const
componentwise vector multiplication
Definition: vec.h:484
vec< T > operator-(void) const
negates the vector
Definition: vec.h:500
vec< T > dbl_cross(const vec< T > &a, const vec< S > &b, vec< U > &c)
returns the double cross product of vector a, b and c a x(b x c)
Definition: vec.h:800
void ceil()
ceil componentwise
Definition: vec.h:618
bool operator==(const vec< S > &v) const
test for equality
Definition: vec.h:585
T median_value(const vec< T > &values)
returns median element without modifying the given vector
Definition: vec.h:1125
T select_value(unsigned k, vec< T > &values)
Definition: vec.h:1100
the cgv namespace
Definition: vr_calib.cxx:9
T & y()
element accessor for the second element
Definition: vec.h:355
unsigned min_index(const fvec< T, N > &v)
returns the index of the smallest value
Definition: fvec.h:367
fvec< T, N > normalize(const fvec< T, N > &v)
return normalized vector
Definition: fvec.h:272
T length(const fvec< T, N > &v)
returns the length of vector v
Definition: fvec.h:310
unsigned _size
number or elements
Definition: vec.h:34
T & first()
element accessor for the first element
Definition: vec.h:311
T inf_norm(const vec< T > &values)
return the infinity norm of the vector
Definition: vec.h:720
T spat(const vec< T > &a, const vec< S > &b, const vec< U > &c)
returns the spat product (mixed vector product) of the vectors a, b and c
Definition: vec.h:807