17 qem(
int d = -1) :
vec<T>((d+1)*(d+2)/2)
36 unsigned int i,j,k=n.
size()+1;
37 for (i=0;i<n.
size(); ++i) {
38 (*this)(i+1) = d*n(i);
39 for (j=i;j<n.
size(); ++j, ++k)
40 (*
this)(k) = n(i)*n(j);
46 return (
unsigned int)sqrt(2.0*this->
size())-1;
51 *
static_cast<vec<T>*
>(
this) = v;
63 for (
unsigned int i=0; i<v.size(); ++i)
70 unsigned int d =
dim();
72 unsigned int i,j,k=d+1;
74 for (j=i; j<d; ++j,++k)
75 m(i,j) = m(j,i) = (*this)(k);
85 for (
unsigned int i=0; i<p.
size(); ++i) {
98 vec<T> minarg(
const vec<T>& p_ref, T relative_epsilon, T max_distance = -1, T epsilon = 1e-10)
const
100 unsigned int d = p_ref.
size();
102 T max_distance2 = max_distance*max_distance;
111 for (
unsigned int i = d; i > 0; ) {
113 if (fabs(W(i)) > epsilon && fabs(W(i)*iW(0)) > relative_epsilon) {
115 for (j = 0; j <= i; ++j)
120 if (max_distance != -1 && (p-p_ref).
sqr_length() <= max_distance2)
127 template <
typename S>
131 for (
unsigned i=0;i<this->
size();++i) (*
this)(i) += v(i);
return *
this;
135 template <
typename S>
139 for (
unsigned i=0;i<this->
size();++i) (*
this)(i) -= v(i);
return *
this;
143 template <
typename S>
146 vec<T> r = *
this; r += v;
return r;
150 template <
typename S>
153 qem<T> r = *
this; r -= v;
return r;
167 qem<T> r = *
this; r *= s;
return r;
186 template <
typename S>
189 for (
unsigned i=0;i<this->
size();++i)
190 if((*
this)(i) != (T)v(i))
return false;
195 template <
typename S>
198 for (
unsigned i=0;i<this->
size();++i)
199 if((*
this)(i) != (T)v(i))
return true;
206 template <
typename T>
209 qem<T> r = v; r *= s;
return r;
qem< T > operator*(const T &s) const
multiplication with scalar s
Definition: qem.h:165
vec< T > minarg(const vec< T > &p_ref, T relative_epsilon, T max_distance=-1, T epsilon=1e-10) const
Definition: qem.h:98
void resize(unsigned dim)
resize the vector
Definition: vec.h:557
diag_mat< T > inv(const diag_mat< T > &m)
returns the inverse of a diagonal matrix
Definition: inv.h:11
qem(const vec< T > &p, const vec< T > &n)
construct from point and normal
Definition: qem.h:23
const T & scalar_part() const
return the scalar part of the qem
Definition: qem.h:55
void resize(unsigned d)
resize the vector
Definition: qem.h:180
void set(const vec< T > &n, T d)
set from normal and distance to origin
Definition: qem.h:33
A column vector class.
Definition: fvec.h:13
unsigned size() const
number of elements
Definition: vec.h:97
qem< T > operator-(void) const
negates the qem
Definition: qem.h:157
void transpose()
transpose matrix
Definition: mat.h:922
fmat< T, N, N > transpose(const fmat< T, N, N > &m)
return the transposed of a square matrix
Definition: fmat.h:196
mat< T > matrix_part() const
return matrix part
Definition: qem.h:68
T sqr_length() const
square length of vector
Definition: vec.h:640
T evaluate(const vec< T > &p) const
evaluate the quadric error metric at given location
Definition: qem.h:79
dimension independent implementation of quadric error metrics
Definition: qem.h:14
qem(int d=-1)
standard constructor initializes qem based on dimension
Definition: qem.h:17
Definition: diag_mat.h:16
qem< T > & operator=(const qem< T > &v)
assignment of a vector v
Definition: qem.h:49
qem< T > operator/(const T &s) const
divides vector by scalar s
Definition: qem.h:172
void zeros()
fill the vector with zeros
Definition: vec.h:531
unsigned dim() const
number of elements
Definition: qem.h:44
const qem< T > operator+(const qem< S > &v) const
qem addition
Definition: qem.h:144
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
bool operator==(const qem< S > &v) const
test for equality
Definition: qem.h:187
vec< T > vector_part() const
return the vector part of the qem
Definition: qem.h:60
qem< T > & operator-=(const qem< S > &v)
in place qem subtraction
Definition: qem.h:136
bool operator!=(const qem< S > &v) const
test for inequality
Definition: qem.h:196
qem< T > & operator+=(const qem< S > &v)
in place qem addition
Definition: qem.h:128
the cgv namespace
Definition: vr_calib.cxx:9
T & y()
element accessor for the second element
Definition: vec.h:355
void svd(const fmat< T, N, M > &A, fmat< T, N, N > &U, fvec< T, M > &D, fmat< T, M, M > &V_t, bool ordering=true, int maxiter=30)
svd wrapper
Definition: align.h:25
T & first()
element accessor for the first element
Definition: vec.h:311
qem(const vec< T > &n, T d)
construct from normal and distance to origin
Definition: qem.h:28