#include <vec3.h>
Collaboration diagram for EMAN::Vec3< Type >:
Public Types | |
typedef Type | type |
One can always cast to the type of a Vec3 by accessing Vec3<Type>::type. | |
Public Member Functions | |
Vec3 () | |
contruct a Vec3 object with all elements equal to 0. | |
template<typename Type2, typename Type3, typename Type4> | |
Vec3 (const Type2 &x, const Type3 &y, const Type4 &z=0) | |
contruct a Vec3 object given (x,y) or (x,y,z) values. | |
template<typename Type2> | |
Vec3 (const vector< Type2 > &v) | |
Construct a Vec3 object given a std::vector object. | |
template<typename Type2> | |
Vec3 (const Vec3< Type2 > &v) | |
Copy constructor copies vector elements. | |
~Vec3 () | |
Destructor. | |
float | normalize () |
Normalize the vector and return its length before the normalization. | |
float | length () const |
Calculate its length. | |
Type | squared_length () const |
Calculate its squared length. | |
template<typename Type2> | |
Type | dot (const Vec3< Type2 > &v) const |
Calculate the dot product of 'this' vector with a second vector. | |
template<typename Type2> | |
Vec3< Type > | cross (const Vec3< Type2 > &v) const |
Calculate the cross product of 'this' vector with a second vector. | |
vector< Type > | as_list () const |
Return the values of this vector as a std::vector. | |
template<typename Type2> | |
void | set_value (const vector< Type2 > &v) |
Set new values using a std::vector object. | |
template<typename Type2> | |
void | set_value_at (int index, const Type2 &value) |
Set values at a particular index. | |
void | set_value (const Type &x, const Type &y, const Type &z) |
Set new values to this vector object. | |
Type | operator[] (int i) const |
Get the ith item of the vector. | |
Type & | operator[] (int i) |
Get the ith item of the vector. | |
Type | at (int i) |
Get the ith item of the vector. | |
int | number_of_element () |
For python __len__. | |
Type * | begin () |
Add this function to make it iterable in Python, so we can call list() or tuple() to convert Vec3f in python to a list or tuple. | |
Type * | end () |
Add this function to make it iterable in Python, so we can call list() or tuple() to convert Vec3f in python to a list or tuple. | |
template<typename Type2> | |
Vec3< Type > & | operator+= (const Vec3< Type2 > &v) |
'this' += v; Add the 2 vectors by adding item by item. | |
template<typename Type2> | |
Vec3< Type > & | operator+= (const Type2 &d) |
'this' += d. | |
template<typename Type2> | |
Vec3< Type > & | operator-= (const Vec3< Type2 > &v) |
'this' -= v; Minus the 2 vectors item by item. | |
template<typename Type2> | |
Vec3< Type > & | operator-= (const Type2 &d) |
'this' -= d; Minus a number from each item of 'this' vector. | |
template<typename Type2> | |
Vec3< Type > & | operator *= (const Type2 &d) |
'this' *= d; Multiply a number on each item of 'this' vector. | |
template<typename Type2> | |
Vec3< Type > & | operator/= (const Type2 &d) |
'this' /= d; Divide a number on each item of 'this' vector. | |
template<typename Type2> | |
operator vector () const | |
Private Attributes | |
Type | vec [3] |
You may try to use other more generic types such as classes but you may get bad results. Note that the normalize and length operations are precise only to 32 bits Note there are convenient typedef so one needn't bother about using template terminology typedef Vec3<float> Vec3f; typedef Vec3<int> Vec3i; typedef Vec3<double> Vec3d; // Not recommended for use unless precision is addressed in this class
Definition at line 66 of file vec3.h.
typedef Type EMAN::Vec3< Type >::type |
One can always cast to the type of a Vec3 by accessing Vec3<Type>::type.
EMAN::Vec3< Type >::Vec3 | ( | ) | [inline] |
EMAN::Vec3< Type >::Vec3 | ( | const Type2 & | x, | |
const Type3 & | y, | |||
const Type4 & | z = 0 | |||
) | [inline] |
contruct a Vec3 object given (x,y) or (x,y,z) values.
x | Value of the first item. | |
y | Value of the second item. | |
z | Value of the third item. If not specified, default to 0. |
Definition at line 89 of file vec3.h.
References EMAN::Vec3< Type >::vec.
00090 { 00091 vec[0] = static_cast<Type>(x); 00092 vec[1] = static_cast<Type>(y); 00093 vec[2] = static_cast<Type>(z); 00094 }
EMAN::Vec3< Type >::Vec3 | ( | const vector< Type2 > & | v | ) | [inline] |
Construct a Vec3 object given a std::vector object.
The std::vector object should have at least 3 items.
v | The std::vector object. It should have at least 3 items. |
Definition at line 101 of file vec3.h.
References EMAN::Vec3< Type >::vec.
00102 { 00103 vec[0] = static_cast<Type>(v[0]); 00104 vec[1] = static_cast<Type>(v[1]); 00105 vec[2] = static_cast<Type>(v[2]); 00106 }
EMAN::Vec3< Type >::Vec3 | ( | const Vec3< Type2 > & | v | ) | [inline] |
EMAN::Vec3< Type >::~Vec3 | ( | ) | [inline] |
vector<Type> EMAN::Vec3< Type >::as_list | ( | ) | const [inline] |
Return the values of this vector as a std::vector.
Definition at line 189 of file vec3.h.
References v, and EMAN::Vec3< Type >::vec.
00190 { 00191 vector < Type > v(3); 00192 v[0] = vec[0]; 00193 v[1] = vec[1]; 00194 v[2] = vec[2]; 00195 return v; 00196 }
Type EMAN::Vec3< Type >::at | ( | int | i | ) | [inline] |
Get the ith item of the vector.
Used in the left side of the assignment.
i | The index of the item to get. Its validality is not checked. |
Definition at line 263 of file vec3.h.
References EMAN::Vec3< Type >::vec.
Referenced by EMAN::EMData::rot_scale_trans(), and EMAN::EMData::rot_scale_trans_background().
00264 { 00265 return vec[i]; 00266 }
Type* EMAN::Vec3< Type >::begin | ( | void | ) | [inline] |
Add this function to make it iterable in Python, so we can call list() or tuple() to convert Vec3f in python to a list or tuple.
Definition at line 282 of file vec3.h.
References EMAN::Vec3< Type >::vec.
00283 { 00284 return &vec[0]; 00285 }
Vec3<Type> EMAN::Vec3< Type >::cross | ( | const Vec3< Type2 > & | v | ) | const [inline] |
Calculate the cross product of 'this' vector with a second vector.
v | The second vector to do the cross product. |
Definition at line 179 of file vec3.h.
References v, and EMAN::Vec3< Type >::vec.
Referenced by EMAN::Quaternion::rotate().
00180 { 00181 return Vec3<Type>((vec[1] * v[2] - vec[2] * v[1]), 00182 (vec[2] * v[0] - vec[0] * v[2]), 00183 (vec[0] * v[1] - vec[1] * v[0])); 00184 }
Type EMAN::Vec3< Type >::dot | ( | const Vec3< Type2 > & | v | ) | const [inline] |
Calculate the dot product of 'this' vector with a second vector.
v | The second vector to do the dot product. |
Definition at line 168 of file vec3.h.
References v, and EMAN::Vec3< Type >::vec.
Referenced by EMAN::operator *(), and EMAN::Symmetry3D::point_in_which_asym_unit().
Type* EMAN::Vec3< Type >::end | ( | void | ) | [inline] |
Add this function to make it iterable in Python, so we can call list() or tuple() to convert Vec3f in python to a list or tuple.
Definition at line 292 of file vec3.h.
References EMAN::Vec3< Type >::vec.
00293 { 00294 return &vec[3]; 00295 }
float EMAN::Vec3< Type >::length | ( | ) | const [inline] |
Calculate its length.
Definition at line 147 of file vec3.h.
References sqrt(), t, and EMAN::Vec3< Type >::vec.
Referenced by EMAN::Vec3< Type >::normalize().
00148 { 00149 float t = (float)(vec[0] * vec[0] + vec[1] * vec[1] + vec[2] * vec[2]); 00150 return (float)sqrt(t); 00151 }
float EMAN::Vec3< Type >::normalize | ( | ) | [inline] |
Normalize the vector and return its length before the normalization.
Definition at line 127 of file vec3.h.
References EMAN::Vec3< Type >::length(), EMAN::Vec3< Type >::set_value(), and EMAN::Vec3< Type >::vec.
Referenced by EMAN::TetrahedralSym::get_asym_unit_points(), EMAN::PlatonicSym::get_asym_unit_points(), EMAN::OptimumOrientationGenerator::optimize_distances(), refalin3d_perturbquat(), EMAN::Transform::set_rotation(), and EMAN::MarchingCubes::surface_face_z().
00128 { 00129 // Warning - float precision 00130 float len = length(); 00131 if (len != 0) { 00132 vec[0] = static_cast<Type> (vec[0] / len); 00133 vec[1] = static_cast<Type> (vec[1] / len); 00134 vec[2] = static_cast<Type> (vec[2] / len); 00135 } 00136 else { 00137 set_value(0, 0, 0); 00138 } 00139 return len; 00140 }
int EMAN::Vec3< Type >::number_of_element | ( | ) | [inline] |
Vec3<Type>& EMAN::Vec3< Type >::operator *= | ( | const Type2 & | d | ) | [inline] |
'this' *= d; Multiply a number on each item of 'this' vector.
d | The number to multiply. |
Definition at line 350 of file vec3.h.
References EMAN::Vec3< Type >::vec.
00350 { 00351 vec[0] = static_cast<Type>(vec[0]*d); 00352 vec[1] = static_cast<Type>(vec[1]*d); 00353 vec[2] = static_cast<Type>(vec[2]*d); 00354 return *this; 00355 }
EMAN::Vec3< Type >::operator vector | ( | ) | const [inline] |
Vec3<Type>& EMAN::Vec3< Type >::operator+= | ( | const Type2 & | d | ) | [inline] |
'this' += d.
Add d to each item of this vector.
d | The number used to be added to this vector. |
Definition at line 314 of file vec3.h.
References EMAN::Vec3< Type >::vec.
00314 { 00315 vec[0] = static_cast<Type>(vec[0]+d); 00316 vec[1] = static_cast<Type>(vec[1]+d); 00317 vec[2] = static_cast<Type>(vec[2]+d); 00318 return *this; 00319 }
Vec3<Type>& EMAN::Vec3< Type >::operator+= | ( | const Vec3< Type2 > & | v | ) | [inline] |
'this' += v; Add the 2 vectors by adding item by item.
v | The vector used to be added to 'this' vector. |
Definition at line 302 of file vec3.h.
References v, and EMAN::Vec3< Type >::vec.
00302 { 00303 vec[0] = static_cast<Type>(vec[0]+v[0]); 00304 vec[1] = static_cast<Type>(vec[1]+v[1]); 00305 vec[2] = static_cast<Type>(vec[2]+v[2]); 00306 return *this; 00307 }
Vec3<Type>& EMAN::Vec3< Type >::operator-= | ( | const Type2 & | d | ) | [inline] |
'this' -= d; Minus a number from each item of 'this' vector.
d | The number used to be substracted from 'this' vector. |
Definition at line 338 of file vec3.h.
References EMAN::Vec3< Type >::vec.
00338 { 00339 vec[0] = static_cast<Type>(vec[0]-d); 00340 vec[1] = static_cast<Type>(vec[1]-d); 00341 vec[2] = static_cast<Type>(vec[2]-d); 00342 return *this; 00343 }
Vec3<Type>& EMAN::Vec3< Type >::operator-= | ( | const Vec3< Type2 > & | v | ) | [inline] |
'this' -= v; Minus the 2 vectors item by item.
v | The vector used to be substracted from 'this' vector. |
Definition at line 326 of file vec3.h.
References v, and EMAN::Vec3< Type >::vec.
00326 { 00327 vec[0] = static_cast<Type>(vec[0]-v[0]); 00328 vec[1] = static_cast<Type>(vec[1]-v[1]); 00329 vec[2] = static_cast<Type>(vec[2]-v[2]); 00330 return *this; 00331 }
Vec3<Type>& EMAN::Vec3< Type >::operator/= | ( | const Type2 & | d | ) | [inline] |
'this' /= d; Divide a number on each item of 'this' vector.
d | The number to divide. |
Definition at line 362 of file vec3.h.
References EMAN::Vec3< Type >::vec.
00362 { 00363 vec[0] = static_cast<Type>(vec[0]/d); 00364 vec[1] = static_cast<Type>(vec[1]/d); 00365 vec[2] = static_cast<Type>(vec[2]/d); 00366 return *this; 00367 }
Type& EMAN::Vec3< Type >::operator[] | ( | int | i | ) | [inline] |
Get the ith item of the vector.
Used in the left side of the assignment.
i | The index of the item to get. Its validality is not checked. |
Definition at line 251 of file vec3.h.
References EMAN::Vec3< Type >::vec.
00252 { 00253 return vec[i]; 00254 }
Type EMAN::Vec3< Type >::operator[] | ( | int | i | ) | const [inline] |
Get the ith item of the vector.
Used in the right side of the assignment.
i | The index of the item to get. Its validality is not checked. |
Definition at line 239 of file vec3.h.
References EMAN::Vec3< Type >::vec.
00240 { 00241 return vec[i]; 00242 }
void EMAN::Vec3< Type >::set_value | ( | const Type & | x, | |
const Type & | y, | |||
const Type & | z | |||
) | [inline] |
void EMAN::Vec3< Type >::set_value | ( | const vector< Type2 > & | v | ) | [inline] |
Set new values using a std::vector object.
v | A std::vector object used to set 'this' vector's value. It should have at least 3 items. |
Definition at line 203 of file vec3.h.
References EMAN::Vec3< Type >::vec.
Referenced by wustl_mm::GraySkeletonCPP::VolumeSkeletonizer::CleanUpSkeleton(), EMAN::Vec3< Type >::normalize(), and EMAN::Quaternion::to_axis().
00204 { 00205 vec[0] = static_cast<Type>(v[0]); 00206 vec[1] = static_cast<Type>(v[1]); 00207 vec[2] = static_cast<Type>(v[2]); 00208 }
void EMAN::Vec3< Type >::set_value_at | ( | int | index, | |
const Type2 & | value | |||
) | [inline] |
Set values at a particular index.
index | The index to be set | |
value | The value to be set |
Definition at line 215 of file vec3.h.
References EMAN::Vec3< Type >::vec.
00216 { 00217 vec[index] = static_cast<Type>(value); 00218 }
Type EMAN::Vec3< Type >::squared_length | ( | ) | const [inline] |
Calculate its squared length.
no sqrt called
Definition at line 157 of file vec3.h.
References EMAN::Vec3< Type >::vec.
Referenced by EMAN::Symmetry3D::get_touching_au_transforms().
Type EMAN::Vec3< Type >::vec[3] [private] |
Definition at line 377 of file vec3.h.
Referenced by EMAN::Vec3< Type >::as_list(), EMAN::Vec3< Type >::at(), EMAN::Vec3< Type >::begin(), EMAN::Vec3< Type >::cross(), EMAN::Vec3< Type >::dot(), EMAN::Vec3< Type >::end(), EMAN::Vec3< Type >::length(), EMAN::Vec3< Type >::normalize(), EMAN::Vec3< Type >::operator *=(), EMAN::Vec3< Type >::operator vector(), EMAN::Vec3< Type >::operator+=(), EMAN::Vec3< Type >::operator-=(), EMAN::Vec3< Type >::operator/=(), EMAN::Vec3< Type >::operator[](), EMAN::Vec3< Type >::set_value(), EMAN::Vec3< Type >::set_value_at(), EMAN::Vec3< Type >::squared_length(), and EMAN::Vec3< Type >::Vec3().