summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorleo2000-07-16 19:51:52 +0000
committerleo2000-07-16 19:51:52 +0000
commit7a4800b080fec82e237f268e8853fa808367c89d (patch)
treee78476fff55f1e792e40102592c67d611d84386e
parentc5405b0353abd24684cb0b52001d299198f1fa0e (diff)
Added -= operator.
git-svn-id: http://svn.leocad.org/trunk@83 c7d43263-9d01-0410-8a33-9dba5d9f93d6
-rw-r--r--common/vector.cpp185
-rw-r--r--common/vector.h58
2 files changed, 122 insertions, 121 deletions
diff --git a/common/vector.cpp b/common/vector.cpp
index 6a61fc5..e0cfd4f 100644
--- a/common/vector.cpp
+++ b/common/vector.cpp
@@ -9,170 +9,167 @@
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
-Vector::Vector(float x, float y, float z)
+Vector::Vector ()
{
- m_fPoint[0] = x;
- m_fPoint[1] = y;
- m_fPoint[2] = z;
+ m_fPoint[0] = 0;
+ m_fPoint[1] = 0;
+ m_fPoint[2] = 0;
}
-Vector::Vector(float point[3])
+Vector::Vector (float x, float y, float z)
{
- m_fPoint[0] = point[0];
- m_fPoint[1] = point[1];
- m_fPoint[2] = point[2];
+ m_fPoint[0] = x;
+ m_fPoint[1] = y;
+ m_fPoint[2] = z;
}
-Vector::Vector(float p1[3], float p2[3])
+Vector::Vector (const float *point)
{
- m_fPoint[0] = p2[0]-p1[0];
- m_fPoint[1] = p2[1]-p1[1];
- m_fPoint[2] = p2[2]-p1[2];
+ m_fPoint[0] = point[0];
+ m_fPoint[1] = point[1];
+ m_fPoint[2] = point[2];
}
-Vector::Vector()
+Vector::Vector (const float *p1, const float *p2)
{
-
+ m_fPoint[0] = p2[0] - p1[0];
+ m_fPoint[1] = p2[1] - p1[1];
+ m_fPoint[2] = p2[2] - p1[2];
}
-Vector::~Vector()
+Vector::~Vector ()
{
-
}
//////////////////////////////////////////////////////////////////////
// Operations
-float Vector::X()
-{
- return m_fPoint[0];
-}
-
-float Vector::Y()
-{
- return m_fPoint[1];
-}
-
-float Vector::Z()
+bool Vector::operator==(Vector& vec)
{
- return m_fPoint[2];
+ if (m_fPoint[0] != vec.m_fPoint[0])
+ return false;
+ if (m_fPoint[1] != vec.m_fPoint[1])
+ return false;
+ if (m_fPoint[2] != vec.m_fPoint[2])
+ return false;
+ return true;
}
-bool Vector::operator==(Vector& vec)
+Vector& Vector::operator*=(float scalar)
{
- if (m_fPoint[0] != vec.m_fPoint[0])
- return false;
- if (m_fPoint[1] != vec.m_fPoint[1])
- return false;
- if (m_fPoint[2] != vec.m_fPoint[2])
- return false;
- return true;
+ m_fPoint[0] *= scalar;
+ m_fPoint[1] *= scalar;
+ m_fPoint[2] *= scalar;
+ return *this;
}
-float Vector::Length()
+Vector& Vector::operator+=(Vector& add)
{
- return (float)sqrt(m_fPoint[0]*m_fPoint[0] + m_fPoint[1]*m_fPoint[1] + m_fPoint[2]*m_fPoint[2]);
+ m_fPoint[0] += add.m_fPoint[0];
+ m_fPoint[1] += add.m_fPoint[1];
+ m_fPoint[2] += add.m_fPoint[2];
+ return *this;
}
-void Vector::Normalize()
+Vector& Vector::operator-=(Vector& sub)
{
- float inv = 1.0f/(float)sqrt(m_fPoint[0]*m_fPoint[0] + m_fPoint[1]*m_fPoint[1] + m_fPoint[2]*m_fPoint[2]);
- m_fPoint[0] *= inv;
- m_fPoint[1] *= inv;
- m_fPoint[2] *= inv;
+ m_fPoint[0] -= sub.m_fPoint[0];
+ m_fPoint[1] -= sub.m_fPoint[1];
+ m_fPoint[2] -= sub.m_fPoint[2];
+ return *this;
}
-Vector& Vector::operator*=(float scalar)
+Vector& Vector::operator=(Vector& source)
{
- m_fPoint[0] *= scalar;
- m_fPoint[1] *= scalar;
- m_fPoint[2] *= scalar;
- return *this;
+ m_fPoint[0] = source.m_fPoint[0];
+ m_fPoint[1] = source.m_fPoint[1];
+ m_fPoint[2] = source.m_fPoint[2];
+ return *this;
}
-void Vector::Add(float point[3])
+Vector& Vector::operator=(const float *point)
{
- m_fPoint[0] += point[0];
- m_fPoint[1] += point[1];
- m_fPoint[2] += point[2];
+ m_fPoint[0] = point[0];
+ m_fPoint[1] = point[1];
+ m_fPoint[2] = point[2];
+ return *this;
}
-void Vector::Add(float x, float y, float z)
+float Vector::Length()
{
- m_fPoint[0] += x;
- m_fPoint[1] += y;
- m_fPoint[2] += z;
+ return (float)sqrt(m_fPoint[0]*m_fPoint[0] + m_fPoint[1]*m_fPoint[1] + m_fPoint[2]*m_fPoint[2]);
}
-Vector& Vector::operator+=(Vector& add)
+void Vector::Normalize()
{
- m_fPoint[0] += add.m_fPoint[0];
- m_fPoint[1] += add.m_fPoint[1];
- m_fPoint[2] += add.m_fPoint[2];
- return *this;
+ float inv = 1.0f/(float)sqrt(m_fPoint[0]*m_fPoint[0] + m_fPoint[1]*m_fPoint[1] + m_fPoint[2]*m_fPoint[2]);
+ m_fPoint[0] *= inv;
+ m_fPoint[1] *= inv;
+ m_fPoint[2] *= inv;
}
-Vector& Vector::operator=(Vector& source)
+void Vector::Add (const float *point)
{
- m_fPoint[0] = source.m_fPoint[0];
- m_fPoint[1] = source.m_fPoint[1];
- m_fPoint[2] = source.m_fPoint[2];
- return *this;
+ m_fPoint[0] += point[0];
+ m_fPoint[1] += point[1];
+ m_fPoint[2] += point[2];
}
-Vector& Vector::operator=(float point[3])
+void Vector::Add (float x, float y, float z)
{
- m_fPoint[0] = point[0];
- m_fPoint[1] = point[1];
- m_fPoint[2] = point[2];
- return *this;
+ m_fPoint[0] += x;
+ m_fPoint[1] += y;
+ m_fPoint[2] += z;
}
void Vector::Scale(float scale)
{
- m_fPoint[0] *= scale;
- m_fPoint[1] *= scale;
- m_fPoint[2] *= scale;
+ m_fPoint[0] *= scale;
+ m_fPoint[1] *= scale;
+ m_fPoint[2] *= scale;
}
Vector& Vector::Cross(Vector& v1, Vector& v2)
{
- m_fPoint[0] = v1.m_fPoint[1]*v2.m_fPoint[2] - v1.m_fPoint[2]*v2.m_fPoint[1];
- m_fPoint[1] = v1.m_fPoint[2]*v2.m_fPoint[0] - v1.m_fPoint[0]*v2.m_fPoint[2];
- m_fPoint[2] = v1.m_fPoint[0]*v2.m_fPoint[1] - v1.m_fPoint[1]*v2.m_fPoint[0];
- return *this;
+ m_fPoint[0] = v1.m_fPoint[1]*v2.m_fPoint[2] - v1.m_fPoint[2]*v2.m_fPoint[1];
+ m_fPoint[1] = v1.m_fPoint[2]*v2.m_fPoint[0] - v1.m_fPoint[0]*v2.m_fPoint[2];
+ m_fPoint[2] = v1.m_fPoint[0]*v2.m_fPoint[1] - v1.m_fPoint[1]*v2.m_fPoint[0];
+ return *this;
}
float Vector::Angle(Vector& vec)
{
- return (float)(RTOD * acos ((m_fPoint[0]*vec.m_fPoint[0]+m_fPoint[1]*vec.m_fPoint[1]+m_fPoint[2]*vec.m_fPoint[2])
- / (sqrt(m_fPoint[0]*m_fPoint[0]+m_fPoint[1]*m_fPoint[1]+m_fPoint[2]*m_fPoint[2])*
- sqrt(vec.m_fPoint[0]*vec.m_fPoint[0]+vec.m_fPoint[1]*vec.m_fPoint[1]+vec.m_fPoint[2]*vec.m_fPoint[2])) ));
+ double d, m1, m2;
+
+ d = m_fPoint[0]*vec.m_fPoint[0]+m_fPoint[1]*vec.m_fPoint[1]+m_fPoint[2]*vec.m_fPoint[2];
+ m1 = sqrt(m_fPoint[0]*m_fPoint[0]+m_fPoint[1]*m_fPoint[1]+m_fPoint[2]*m_fPoint[2]);
+ m2 = sqrt(vec.m_fPoint[0]*vec.m_fPoint[0]+vec.m_fPoint[1]*vec.m_fPoint[1]+vec.m_fPoint[2]*vec.m_fPoint[2]);
+
+ return (float) (RTOD * acos (d / (m1*m2)));
}
float Vector::Dot(Vector& vec)
{
- return m_fPoint[0]*vec.m_fPoint[0]+m_fPoint[1]*vec.m_fPoint[1]+m_fPoint[2]*vec.m_fPoint[2];
+ return m_fPoint[0]*vec.m_fPoint[0]+m_fPoint[1]*vec.m_fPoint[1]+m_fPoint[2]*vec.m_fPoint[2];
}
-void Vector::ToFloat(float point[3])
+void Vector::ToFloat (float *point)
{
- point[0] = m_fPoint[0];
- point[1] = m_fPoint[1];
- point[2] = m_fPoint[2];
+ point[0] = m_fPoint[0];
+ point[1] = m_fPoint[1];
+ point[2] = m_fPoint[2];
}
-void Vector::FromFloat(float point[3])
+void Vector::FromFloat (const float *point)
{
- m_fPoint[0] = point[0];
- m_fPoint[1] = point[1];
- m_fPoint[2] = point[2];
+ m_fPoint[0] = point[0];
+ m_fPoint[1] = point[1];
+ m_fPoint[2] = point[2];
}
void Vector::FromFloat(float x, float y, float z)
{
- m_fPoint[0] = x;
- m_fPoint[1] = y;
- m_fPoint[2] = z;
+ m_fPoint[0] = x;
+ m_fPoint[1] = y;
+ m_fPoint[2] = z;
}
-
diff --git a/common/vector.h b/common/vector.h
index de613dc..4a2d5de 100644
--- a/common/vector.h
+++ b/common/vector.h
@@ -7,37 +7,41 @@
class Vector
{
-public:
- float X();
- float Y();
- float Z();
- float Dot(Vector& vec);
- float Angle(Vector& vec);
- void Add(float point[3]);
- void Add(float x, float y, float z);
- Vector& operator+=(Vector& add);
- Vector& operator*=(float scalar);
- Vector& operator=(Vector& source);
- Vector& operator=(float point[3]);
- bool operator==(Vector& vec);
+ public:
+ Vector ();
+ Vector (float x, float y, float z);
+ Vector (const float *point);
+ Vector (const float *p1, const float *p2);
+ virtual ~Vector ();
- Vector& Cross(Vector& v1, Vector& v2);
+ float X ()
+ { return m_fPoint[0]; }
+ float Y ()
+ { return m_fPoint[1]; }
+ float Z ()
+ { return m_fPoint[2]; }
- void ToFloat(float point[3]);
- void FromFloat(float point[3]);
- void FromFloat(float x, float y, float z);
- float Length();
- void Normalize();
- void Scale(float scale);
+ float Dot (Vector& vec);
+ float Angle (Vector& vec);
+ Vector& Cross (Vector& v1, Vector& v2);
+ void Add (const float *point);
+ void Add (float x, float y, float z);
+ Vector& operator+=(Vector& add);
+ Vector& operator-=(Vector& sub);
+ Vector& operator*=(float scalar);
+ Vector& operator=(Vector& source);
+ Vector& operator=(const float *point);
+ bool operator==(Vector& vec);
- Vector(float x, float y, float z);
- Vector(float point[3]);
- Vector(float p1[3], float p2[3]);
- Vector();
- virtual ~Vector();
+ void ToFloat (float *point);
+ void FromFloat (const float *point);
+ void FromFloat (float x, float y, float z);
+ float Length ();
+ void Normalize ();
+ void Scale (float scale);
-protected:
- float m_fPoint[3];
+ protected:
+ float m_fPoint[3];
};
#endif // _VECTOR_H_