//Vector.h
extern const double uZero;
class Vector3
{
float x, y, z;
public:
Vector3() { x = 0; y = 0; z = 0; };
Vector3(float x1, float y1, float z1) { x = x1, y = y1, z = z1; }
Vector3 operator+(Vector3 &c);
Vector3 operator-(Vector3 &c);
Vector3 operator*(Vector3 &c);
Vector3 operator/(Vector3 &c);
void operator=(Vector3 &c);
float length();
float dot(const Vector3 &c);
void normalize();
Vector3 crossProduct(const Vector3 &v);
void printVec3();
~Vector3();
};
//Vector.cpp
#include "Vector.h"
const double uZero = 1e-6;
Vector3 Vector3::operator+(Vector3 & c)
{
return Vector3(x+c.x,y+c.y,z+c.z);
}
Vector3 Vector3::operator-(Vector3 & c)
{
return Vector3(x-c.x,y-c.y,z-c.z);
}
Vector3 Vector3::operator*(Vector3 & c)
{
return Vector3(x*c.x,y*c.y,z*c.z);
}
Vector3 Vector3::operator/(Vector3 & c)
{
if (fabsf(c.x) <= uZero || fabsf(c.y) <= uZero | fabsf(c.z) <= uZero)
{
return *this;
}
return Vector3(x/c.x,y/c.y,z/c.z);
}
void Vector3::operator=(Vector3 & c)
{
x = c.x;
y = c.y;
z = c.z;
}
float Vector3::length()
{
return sqrtf(dot(*this));
}
float Vector3::dot(const Vector3 & c)
{
return x*c.x,y*c.y,z*c.z;
}
void Vector3::normalize()
{
float len = length();
if (len < uZero)
len = 1;
x *= len;
y *= len;
z *= len;
}
Vector3 Vector3::crossProduct(const Vector3 & v)
{
return Vector3(y*v.z-z*v.y,z*v.x-x*v.z,x*v.y-y*v.x);
}
void Vector3::printVec3()
{
cout << "(" << x << "," << y << "," << z << ")" << endl;
}
Vector3::~Vector3()
{
}
//main使用
Vector3 vec1(1.0f,2.0f,3.0f);
Vector3 vec2(2.0f, 2.0f, 3.0f);
Vector3 vecResult = vec1.crossProduct(vec2);
Vector3 vec3(3.0f, 2.0f, 3.0f);
Vector3 vec4(4.0f, 2.0f, 3.0f);
Vector3 vec5(5.0f, 2.0f, 3.0f);
vecResult.printVec3();