#include <vec3.h>
Inheritance 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 275 of file vec3.h.
|
One can always cast to the type of a Vec3 by accessing Vec3<Type>::type.
|
|
contruct a Vec3 object with all elements equal to 0.
Definition at line 284 of file vec3.h. 00284 : vec[0](0),vec[1](0),vec[2](0)*/ { 00285 00286 vec[0] = static_cast<Type>(0); 00287 vec[1] = static_cast<Type>(0); 00288 vec[2] = static_cast<Type>(0); 00289 }
|
|
contruct a Vec3 object given (x,y) or (x,y,z) values.
Definition at line 298 of file vec3.h. 00299 { 00300 vec[0] = static_cast<Type>(x); 00301 vec[1] = static_cast<Type>(y); 00302 vec[2] = static_cast<Type>(z); 00303 }
|
|
Construct a Vec3 object given a std::vector object. The std::vector object should have at least 3 items.
Definition at line 310 of file vec3.h. 00311 { 00312 vec[0] = static_cast<Type>(v[0]); 00313 vec[1] = static_cast<Type>(v[1]); 00314 vec[2] = static_cast<Type>(v[2]); 00315 }
|
|
Copy constructor copies vector elements.
Definition at line 320 of file vec3.h.
|
|
Destructor.
Definition at line 329 of file vec3.h. 00329 {}
|
|
Return the values of this vector as a std::vector.
Definition at line 398 of file vec3.h. 00399 { 00400 vector < Type > v(3); 00401 v[0] = vec[0]; 00402 v[1] = vec[1]; 00403 v[2] = vec[2]; 00404 return v; 00405 }
|
|
Get the ith item of the vector. Used in the left side of the assignment.
Definition at line 472 of file vec3.h. 00473 { 00474 return vec[i]; 00475 }
|
|
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 491 of file vec3.h. 00492 { 00493 return &vec[0]; 00494 }
|
|
Calculate the cross product of 'this' vector with a second vector.
Definition at line 388 of file vec3.h. Referenced by EMAN::Quaternion::rotate(). 00389 { 00390 return Vec3<Type>((vec[1] * v[2] - vec[2] * v[1]), 00391 (vec[2] * v[0] - vec[0] * v[2]), 00392 (vec[0] * v[1] - vec[1] * v[0])); 00393 }
|
|
Calculate the dot product of 'this' vector with a second vector.
Definition at line 377 of file vec3.h. Referenced by EMAN::operator *(), and EMAN::Symmetry3D::point_in_which_asym_unit().
|
|
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 501 of file vec3.h. Referenced by EMAN::Symmetry3D::cache_au_planes(), wustl_mm::GraySkeletonCPP::VolumeSkeletonizer::CleanUpSkeleton(), EMAN::OptimumOrientationGenerator::optimize_distances(), EMAN::TestUtil::test_map_emobject(), EMAN::TestUtil::test_map_float(), EMAN::TestUtil::test_map_int(), EMAN::TestUtil::test_map_long(), and EMAN::TestUtil::test_map_string(). 00502 { 00503 return &vec[3]; 00504 }
|
|
Calculate its length.
Definition at line 356 of file vec3.h. Referenced by EMAN::PointArray::align_trans_2d(), EMAN::Quaternion::to_angle(), and EMAN::Quaternion::to_axis(). 00357 { 00358 float t = (float)(vec[0] * vec[0] + vec[1] * vec[1] + vec[2] * vec[2]); 00359 return (float)sqrt(t); 00360 }
|
|
Normalize the vector and return its length before the normalization.
Definition at line 336 of file vec3.h. Referenced by EMAN::TetrahedralSym::get_asym_unit_points(), EMAN::PlatonicSym::get_asym_unit_points(), EMAN::OptimumOrientationGenerator::optimize_distances(), refalin3d_perturbquat(), and EMAN::Transform::set_rotation(). 00337 { 00338 // Warning - float precision 00339 float len = length(); 00340 if (len != 0) { 00341 vec[0] = static_cast<Type> (vec[0] / len); 00342 vec[1] = static_cast<Type> (vec[1] / len); 00343 vec[2] = static_cast<Type> (vec[2] / len); 00344 } 00345 else { 00346 set_value(0, 0, 0); 00347 } 00348 return len; 00349 }
|
|
For python __len__.
Definition at line 481 of file vec3.h. 00482 {
00483 return 3;
00484 }
|
|
'this' *= d; Multiply a number on each item of 'this' vector.
Definition at line 559 of file vec3.h. 00559 { 00560 vec[0] = static_cast<Type>(vec[0]*d); 00561 vec[1] = static_cast<Type>(vec[1]*d); 00562 vec[2] = static_cast<Type>(vec[2]*d); 00563 return *this; 00564 }
|
|
Definition at line 579 of file vec3.h. 00579 { 00580 vector<Type2> v(vec,vec+3); 00581 return v; 00582 }
|
|
'this' += d. Add d to each item of this vector.
Definition at line 523 of file vec3.h. 00523 { 00524 vec[0] = static_cast<Type>(vec[0]+d); 00525 vec[1] = static_cast<Type>(vec[1]+d); 00526 vec[2] = static_cast<Type>(vec[2]+d); 00527 return *this; 00528 }
|
|
'this' += v; Add the 2 vectors by adding item by item.
Definition at line 511 of file vec3.h. 00511 { 00512 vec[0] = static_cast<Type>(vec[0]+v[0]); 00513 vec[1] = static_cast<Type>(vec[1]+v[1]); 00514 vec[2] = static_cast<Type>(vec[2]+v[2]); 00515 return *this; 00516 }
|
|
'this' -= d; Minus a number from each item of 'this' vector.
Definition at line 547 of file vec3.h. 00547 { 00548 vec[0] = static_cast<Type>(vec[0]-d); 00549 vec[1] = static_cast<Type>(vec[1]-d); 00550 vec[2] = static_cast<Type>(vec[2]-d); 00551 return *this; 00552 }
|
|
'this' -= v; Minus the 2 vectors item by item.
Definition at line 535 of file vec3.h. 00535 { 00536 vec[0] = static_cast<Type>(vec[0]-v[0]); 00537 vec[1] = static_cast<Type>(vec[1]-v[1]); 00538 vec[2] = static_cast<Type>(vec[2]-v[2]); 00539 return *this; 00540 }
|
|
'this' /= d; Divide a number on each item of 'this' vector.
Definition at line 571 of file vec3.h. 00571 { 00572 vec[0] = static_cast<Type>(vec[0]/d); 00573 vec[1] = static_cast<Type>(vec[1]/d); 00574 vec[2] = static_cast<Type>(vec[2]/d); 00575 return *this; 00576 }
|
|
Get the ith item of the vector. Used in the left side of the assignment.
Definition at line 460 of file vec3.h. 00461 { 00462 return vec[i]; 00463 }
|
|
Get the ith item of the vector. Used in the right side of the assignment.
Definition at line 448 of file vec3.h. 00449 { 00450 return vec[i]; 00451 }
|
|
Set new values to this vector object.
Definition at line 434 of file vec3.h.
|
|
Set new values using a std::vector object.
Definition at line 412 of file vec3.h. Referenced by wustl_mm::GraySkeletonCPP::VolumeSkeletonizer::CleanUpSkeleton(), and EMAN::Quaternion::to_axis(). 00413 { 00414 vec[0] = static_cast<Type>(v[0]); 00415 vec[1] = static_cast<Type>(v[1]); 00416 vec[2] = static_cast<Type>(v[2]); 00417 }
|
|
Set values at a particular index.
Definition at line 424 of file vec3.h. 00425 { 00426 vec[index] = static_cast<Type>(value); 00427 }
|
|
Calculate its squared length. no sqrt called
Definition at line 366 of file vec3.h. Referenced by EMAN::Symmetry3D::get_touching_au_transforms().
|
|
|