Point.h

Go to the documentation of this file.
00001 
00006 #include "Vector.h"
00007 
00008 #ifndef Point_h
00009 #define Point_h
00010 
00011 #include <iosfwd>
00012 
00013 class Point {
00014  public:
00015     Point() {
00016         data[0] = data[1] = data[2] = 0.0;
00017     }
00018 
00019     Point(double x, double y, double z) {
00020         data[0] = x; data[1] = y; data[2] = z;
00021     }
00022 
00023     Point(const Point& copy) {
00024         for(int i=0;i<3;i++)
00025             data[i] = copy.data[i];
00026     }
00027     explicit Point(const Vector& copy) {
00028         data[0] = copy.x(); data[1] = copy.y(); data[2] = copy.z();
00029     }
00030 
00031     Point& operator=(const Point& copy) {
00032         for(int i=0;i<3;i++)
00033             data[i] = copy.data[i];
00034         return *this;
00035     }
00036 
00037     ~Point() {
00038     }
00039 
00040     double x() const {
00041         return data[0];
00042     }
00043     double y() const {
00044         return data[1];
00045     }
00046     double z() const {
00047         return data[2];
00048     }
00049 
00050     Vector operator-(const Point& p) const {
00051         return Vector(data[0]-p.data[0], data[1]-p.data[1], data[2]-p.data[2]);
00052     }
00053     Point operator+(const Vector& v) const {
00054         return Point(data[0]+v.x(), data[1]+v.y(), data[2]+v.z());
00055     }
00056     Point operator-(const Vector& v) const {
00057         return Point(data[0]-v.x(), data[1]-v.y(), data[2]-v.z());
00058     }
00059 
00060     Point& operator+=(const Vector& v) {
00061         data[0]+=v.x();
00062         data[1]+=v.y();
00063         data[2]+=v.z();
00064         return *this;
00065     }
00066 
00067     Point& operator-=(const Vector& v) {
00068         data[0]-=v.x();
00069         data[1]-=v.y();
00070         data[2]-=v.z();
00071         return *this;
00072     }
00073  private:
00074     double data[3];
00075 };
00076 
00077 inline Point operator+(const Vector& v, const Point& p)
00078 {
00079     return Point(v.x() + p.x(), v.y() + p.y(), v.z() + p.z());
00080 }
00081 
00082 inline Point Interpolate(double s2, const Point& p1, const Point& p2)
00083 {
00084     double s1 = 1-s2;
00085     return Point(s1*p1.x() + s2*p2.x(), s1*p1.y() + s2*p2.y(),
00086                  s1*p1.z() + s2*p2.z());
00087 }
00088 
00089 inline Point AffineCombination(double s1, const Point& p1,
00090                                double s2, const Point& p2)
00091 {
00092     return Point(s1*p1.x() + s2*p2.x(), s1*p1.y() + s2*p2.y(),
00093                  s1*p1.z() + s2*p2.z());
00094 }
00095 
00096 inline Point AffineCombination(double s1, const Point& p1,
00097                                double s2, const Point& p2,
00098                                double s3, const Point& p3)
00099 {
00100     return Point(s1*p1.x() + s2*p2.x() + s3*p3.x(),
00101                  s1*p1.y() + s2*p2.y() + s3*p3.y(),
00102                  s1*p1.z() + s2*p2.z() + s3*p3.z());
00103 }
00104 
00105 inline double Dot(const Point& v1, const Vector& v2)
00106 {
00107     return v1.x()*v2.x() + v1.y()*v2.y() + v1.z()*v2.z();
00108 }
00109 
00110 inline double Dot(const Vector& v1, const Point& v2)
00111 {
00112     return v1.x()*v2.x() + v1.y()*v2.y() + v1.z()*v2.z();
00113 }
00114 
00115 inline Point Min(const Point& p1, const Point& p2)
00116 {
00117     return Point(Min(p1.x(), p2.x()), Min(p1.y(), p2.y()), Min(p1.z(), p2.z()));
00118 }
00119 
00120 inline Point Max(const Point& p1, const Point& p2)
00121 {
00122     return Point(Max(p1.x(), p2.x()), Max(p1.y(), p2.y()), Max(p1.z(), p2.z()));
00123 }
00124 
00125 std::ostream& operator<<(std::ostream&, const Point& v1);
00126 
00127 #endif
00128 

Generated on Tue Jan 29 21:34:53 2008 for specter by  doxygen 1.4.6