INTRODUCTION Overview Download and Install Quick Start Documentation Publications NONFRAMEWORK CODE Driver Interfaces Drivers Libraries Utilities FRAMEWORK CODE Interfaces Components Libraries Utilities Full Software Listings DEVELOPER Tutorials Examples Dev Guide Dashboard PEOPLE Contributors Users Project Download Mailing lists
|
vector3.h00001 #ifndef ORCAQGUI3D_VECTOR3_H 00002 #define ORCAQGUI3D_VECTOR3_H 00003 00004 #include <string> 00005 00006 // 00007 // From http://student.kuleuven.be/~m0216922/CG/3dbasics.html 00008 // 00009 00010 namespace orcaqgui3d { 00011 00013 // [ x ] // 00014 // Vector Class [ y ] // 00015 // [ z ] // 00017 class Vector3 00018 { 00019 public: 00020 00021 Vector3(double x, double y, double z) 00022 { v_[0]=x; v_[1]=y; v_[2]=z; } 00023 Vector3() 00024 { v_[0]=0; v_[1]=0; v_[2]=0; } 00025 00026 double x() const { return v_[0]; } 00027 double y() const { return v_[1]; } 00028 double z() const { return v_[2]; } 00029 00030 double &x() { return v_[0]; } 00031 double &y() { return v_[1]; } 00032 double &z() { return v_[2]; } 00033 00034 double operator[](int i) const { return v_[i]; } 00035 double &operator[](int i) { return v_[i]; } 00036 00037 double length() const; 00038 void normalise(); 00039 double distance(const Vector3 &v) const; 00040 double dot(const Vector3 &v) const; 00041 Vector3 cross(const Vector3 &v) const; 00042 00043 private: 00044 double v_[3]; 00045 }; 00046 00047 double length(const Vector3 &v); 00048 Vector3 normalise(const Vector3 &v); 00049 double distance(const Vector3 &v, const Vector3 &w); 00050 double dot(const Vector3 &v, const Vector3 &w); 00051 Vector3 cross(const Vector3 &v, const Vector3 &w); 00052 Vector3 operator-(const Vector3 &v, const Vector3 &w); 00053 Vector3 operator-(const Vector3 &v); 00054 Vector3 operator+(const Vector3 &v, const Vector3 &w); 00055 Vector3 operator*(const Vector3 &v, double a); 00056 Vector3 operator*(double a, const Vector3 &v); 00057 Vector3 operator/(const Vector3 &v, double a); 00058 00059 // Gives the angle between two 3D vectors (in radians) 00060 double vectorAngle(const Vector3 &v, const Vector3 &w); 00061 00062 // Rotate vector v around arbitrary axis for angle radians. It can only 00063 // rotate around an axis through our object, to rotate around another 00064 // axis: first translate the object to the axis, then use this 00065 // function, then translate back in the new direction. 00066 Vector3 rotateAroundArbitrary(const Vector3 &v, const Vector3 &axis, double angle); 00067 00068 std::string toString( const Vector3 &v ); 00069 inline std::ostream &operator<<( std::ostream &s, const Vector3 &v ) 00070 { return s << toString(v); } 00071 00072 } 00073 00074 #endif |
Webmaster: Tobias Kaupp (tobasco at users.sourceforge.net)