// 重载二元“+”和“-”运算符 Vector3 operator +(const Vector3& a) const { return Vector3(x + a.x, y + a.y, z + a.z); }
Vector3 operator -(const Vector3& a) const { return Vector3(x - a.x, y - a.y, z - a.z); }
// 与标量的乘、除法 Vector3 operator *(float a) const { return Vector3(x * a, y * a, z * a); }
Vector3 operator /(float a) const { float oneOverA = 1.0f / a; // 注意,这里没有检查除零 return Vector3(x * oneOverA, y * oneOverA, z * oneOverA); }
// 重载自反运算符 Vector3& operator +=(const Vector3& a) { x += a.x; y += a.y; z += a.z; return *this; }
Vector3& operator -=(const Vector3& a) { x -= a.x; y -= a.y; z -= a.z; return *this; }
Vector3& operator *=(float a) { x *= a; y *= a; z *= a; return *this; }
Vector3& operator /=(float a) { float oneOverA = 1.0f / a; x *= oneOverA; y *= oneOverA; z *= oneOverA; return *this; }
// 向量点乘,重载标准的乘法运算符 floatoperator *(const Vector3& a) const { return x * a.x + y * a.y + z * a.z; }
4. 其他操作
1 2 3 4 5 6 7 8 9 10 11 12 13
// 置为零向量 voidzero(){ x = y = z = 0.0f; }
// 向量标准化 voidnormalize(){ float magSq = x * x + y * y + z * z; if (magSq > 0.0f) { // 检查除零 float oneOverMag = 1.0f / sqrt(magSq); x *= oneOverMag; y *= oneOverMag; z *= oneOverMag; } }