Lots of cleanup and started moving the PN out of the main
This commit is contained in:
parent
30ae8631a9
commit
2a50f0fc9a
3 changed files with 278 additions and 219 deletions
51
double3.h
51
double3.h
|
|
@ -2,81 +2,80 @@
|
|||
#include <cmath>
|
||||
|
||||
struct double3 {
|
||||
double data[3];
|
||||
union {
|
||||
struct {double x, y, z;};
|
||||
double data[3]; // For legacy access
|
||||
};
|
||||
double3() {}
|
||||
double3(const double x, const double y, const double z)
|
||||
{
|
||||
data[0] = x;
|
||||
data[1] = y;
|
||||
data[2] = z;
|
||||
}
|
||||
: x(x), y(y), z(z) {}
|
||||
double& operator[](int i) {return data[i];}
|
||||
const double operator[](int i) const {return data[i];}
|
||||
double3& operator=(const double3& a)
|
||||
{
|
||||
data[0] = a.data[0];
|
||||
data[1] = a.data[1];
|
||||
data[2] = a.data[2];
|
||||
x = a.x;
|
||||
y = a.y;
|
||||
z = a.z;
|
||||
return *this;
|
||||
}
|
||||
double3& operator+=(const double3& a)
|
||||
{
|
||||
data[0] += a.data[0];
|
||||
data[1] += a.data[1];
|
||||
data[2] += a.data[2];
|
||||
x += a.x;
|
||||
y += a.y;
|
||||
z += a.z;
|
||||
return *this;
|
||||
}
|
||||
double3& operator-=(const double3& a)
|
||||
{
|
||||
data[0] -= a.data[0];
|
||||
data[1] -= a.data[1];
|
||||
data[2] -= a.data[2];
|
||||
x -= a.x;
|
||||
y -= a.y;
|
||||
z -= a.z;
|
||||
return *this;
|
||||
}
|
||||
double3& operator/=(const double& c)
|
||||
{
|
||||
data[0] /= c;
|
||||
data[1] /= c;
|
||||
data[2] /= c;
|
||||
x /= c;
|
||||
y /= c;
|
||||
z /= c;
|
||||
return *this;
|
||||
}
|
||||
double norm2() const
|
||||
{
|
||||
return data[0]*data[0]+data[1]*data[1]+data[2]*data[2];
|
||||
return x*x + y*y + z*z;
|
||||
}
|
||||
double norm() const
|
||||
{
|
||||
return sqrt(data[0]*data[0]+data[1]*data[1]+data[2]*data[2]);
|
||||
return sqrt(x*x + y*y + z*z);
|
||||
}
|
||||
operator double*() {return data;}
|
||||
};
|
||||
|
||||
inline double3 operator*(const double& c, const double3& a)
|
||||
{
|
||||
return double3(a.data[0]*c, a.data[1]*c, a.data[2]*c);
|
||||
return double3(a.x*c, a.y*c, a.z*c);
|
||||
}
|
||||
|
||||
inline double3 operator*(const double3& a, const double& c)
|
||||
{
|
||||
return double3(a.data[0]*c, a.data[1]*c, a.data[2]*c);
|
||||
return double3(a.x*c, a.y*c, a.z*c);
|
||||
}
|
||||
|
||||
inline double operator*(const double3& a, const double3& b)
|
||||
{
|
||||
return a.data[0]*b.data[0]+a.data[1]*b.data[1]+a.data[2]*b.data[2];
|
||||
return a.x*b.x+a.y*b.y+a.z*b.z;
|
||||
}
|
||||
|
||||
inline double3 operator/(const double3& a, const double& c)
|
||||
{
|
||||
return double3(a.data[0]/c, a.data[1]/c, a.data[2]/c);
|
||||
return double3(a.x/c, a.y/c, a.z/c);
|
||||
}
|
||||
|
||||
inline double3 operator+(const double3& a, const double3& b)
|
||||
{
|
||||
return double3(a.data[0]+b.data[0], a.data[1]+b.data[1], a.data[2]+b.data[2]);
|
||||
return double3(a.x+b.x, a.y+b.y, a.z+b.z);
|
||||
}
|
||||
|
||||
inline double3 operator-(const double3& a, const double3& b)
|
||||
{
|
||||
return double3(a.data[0]-b.data[0], a.data[1]-b.data[1], a.data[2]-b.data[2]);
|
||||
return double3(a.x-b.x, a.y-b.y, a.z-b.z);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue