Main Page | Class Hierarchy | Class List | File List | Class Members | File Members | Related Pages

vec3d.h

Go to the documentation of this file.
00001 
00008 #if !defined(VEC3D_H)
00009 #define VEC3D_H
00010 
00011 enum CoordUnits{ BOHR_U, ANGSTROM_U };
00012 
00013 #include "haio.h"
00014 #include "hastl.h"
00015 //#include "hastring.h"
00016 #include "types.h"
00017 
00018 class HaMat_double;
00019 class HaVec_double;
00020 
00022 class Vec3D : public Location
00023 {
00024 protected:
00025 //      double pos[3];
00026 public:
00027   Vec3D();
00028   virtual ~Vec3D();
00029 
00030   inline double GetX() const { return pos[0]; } 
00031   inline double GetY() const { return pos[1]; } 
00032   inline double GetZ() const { return pos[2]; } 
00033 
00034   Vec3D& operator=(const Vec3D& ref_vec);
00035 
00036   double& operator[](int i) { return pos[i];}              
00037   const double& operator[](int i) const { return pos[i];}  
00038 
00039   friend Vec3D operator+(const Vec3D& v1,const Vec3D& v2);  
00040   friend Vec3D operator-(const Vec3D& v1,const Vec3D& v2);  
00041   friend Vec3D operator*(const double factor,const Vec3D& v);    
00042   
00043   double length() const; 
00044   double length2() const; 
00045 
00046   void SetX(const double x_new); 
00047   void SetY(const double y_new); 
00048   void SetZ(const double z_new); 
00049 
00050   int SetFromStr( const char* str); 
00051 
00052   void ScaleCoord(double scale ); 
00053   int normalize();                
00054 
00055   int RotatePt(Vec3D& still_pt,Vec3D& n, double cosa, double sina); 
00056   int Rotate(Vec3D& n, double cosa, double sina); 
00057         
00058 // Geometry Calculations:
00059 
00060 static double CalcTorsion( const Vec3D* atm1, const Vec3D* atm2,
00061                                                    const Vec3D* atm3, const Vec3D* atm4);  
00062 static double CalcDihedral( const Vec3D* atm1, const Vec3D* atm2,
00063                                                     const Vec3D* atm3, const Vec3D* atm4); 
00064 static double CalcAngle( const Vec3D* atm1, const Vec3D* atm2, const Vec3D* atm3); 
00065 static double CalcDistance( const Vec3D* atm1, const Vec3D* atm2,  
00066                                                     const CoordUnits units = BOHR_U);
00067 
00068 static int VecProduct( Vec3D& vprod, const Vec3D& vec1, const Vec3D& vec2); 
00069 static double DotProduct( const Vec3D& vec1, const Vec3D& vec2); 
00070 static int diff(Vec3D& c, const Vec3D& vec1, const Vec3D& vec2); 
00071 static int sum (Vec3D& c, const Vec3D& vec1, const Vec3D& vec2); 
00072 
00073 static int CalcHlxParams(const Vec3D& c0_1, const Vec3D& v1_1, const Vec3D& v2_1, const Vec3D& v3_1,
00074                          const Vec3D& c0_2, const Vec3D& v1_2, const Vec3D& v2_2, const Vec3D& v3_2,
00075                                                  double& shift, double& slide, double& rise,
00076                                                  double& tilt, double& roll,double& twist,
00077                                                  int idir=1); 
00078 
00079 
00080 
00081 
00082 static int SetAtomPos( Vec3D* pptr, const Vec3D* ptr1, const Vec3D* pptr2, const Vec3D* pptr3,
00083                                            double dist, double val_angle, double dih_angle); 
00084 
00085 };   
00086 
00087 typedef Vec3D Point3D;
00088 typedef vector<Vec3D> Vec3D_arr;
00089 
00090 class PointIterator
00092 {
00093 public:
00094 
00095         virtual Vec3D* GetFirstPt() = 0; 
00096         virtual Vec3D* GetNextPt() = 0;  
00097 
00098 //      virtual Vec3D* GetPtByIdx(int idx) = 0; //!< Get Point by index ( zero based ) 
00099 //      virtual    int GetPtNum() = 0;          //!< Get total of number of points in the collection
00100 };
00101 
00102 
00103 class PointCollection
00105 {
00106 public:
00107     virtual PointIterator* GetPointIterator() = 0; 
00108     virtual int GetPtNum() = 0;                        
00109 
00110 //  virtual HaString GetRef() const = 0;  //!< Get the text reference for a point collection
00111 //      virtual bool FillRef(char* buf,int mode = 0) const = 0; //!< Write text reference for a point collection to buffer 
00112 
00113         int IsWithinRadius(Vec3D* pptr, double limit ); 
00114 
00115         static int Superimpose( PointCollection& grp1,  PointCollection& grp2, 
00116                                     HaMat_double& rot_mat,  HaVec_double& transl_vec, double& eps); 
00117 
00118 
00119 };
00120 
00121 
00122 extern "C" int rot_mat_to_euler(const HaMat_double& rmat, double& phi, double& cos_theta, double& psi);
00123 extern "C" int euler_to_rot_mat(const double phi, const double cos_theta, const double psi, HaMat_double& rmat);
00124 
00125 
00126 #endif /* !VEC3D_H */

Generated on Tue Feb 17 02:03:08 2004 for harlem by doxygen 1.3.6