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