55 lines
1.4 KiB
C++
55 lines
1.4 KiB
C++
#define VECTOR3_INLINE_CPP
|
|
|
|
#ifdef VECTOR3_H
|
|
#define METHSPEC inline
|
|
#else
|
|
#include "Vector3.h"
|
|
#define METHSPEC
|
|
#endif
|
|
|
|
#include <cmath>
|
|
|
|
METHSPEC Vector3::Vector3(double x, double y, double z) : x(x), y(y), z(z) {
|
|
}
|
|
|
|
METHSPEC Vector3 Vector3::add(double x, double y, double z) const {
|
|
return Vector3(this->x + x, this->y + y, this->z + z);
|
|
}
|
|
|
|
METHSPEC Vector3 Vector3::add(const Vector3 &other) const {
|
|
return Vector3(x + other.x, y + other.y, z + other.z);
|
|
}
|
|
|
|
METHSPEC Vector3 Vector3::sub(const Vector3 &other) const {
|
|
return Vector3(x - other.x, y - other.y, z - other.z);
|
|
}
|
|
|
|
METHSPEC Vector3 Vector3::inverse() const {
|
|
return Vector3(-x, -y, -z);
|
|
}
|
|
|
|
METHSPEC Vector3 Vector3::scale(double scaling) const {
|
|
return Vector3(x * scaling, y * scaling, z * scaling);
|
|
}
|
|
|
|
METHSPEC double Vector3::getNorm() const {
|
|
return sqrt(x * x + y * y + z * z);
|
|
}
|
|
|
|
METHSPEC Vector3 Vector3::normalize() const {
|
|
double norm = sqrt(x * x + y * y + z * z);
|
|
if (norm == 0.0) {
|
|
return VECTOR_ZERO;
|
|
} else {
|
|
norm = 1.0 / norm;
|
|
return Vector3(x * norm, y * norm, z * norm);
|
|
}
|
|
}
|
|
|
|
METHSPEC double Vector3::dotProduct(const Vector3 &other) const {
|
|
return x * other.x + y * other.y + z * other.z;
|
|
}
|
|
|
|
METHSPEC Vector3 Vector3::crossProduct(const Vector3 &other) const {
|
|
return Vector3(y * other.z - z * other.y, z * other.x - x * other.z, x * other.y - y * other.x);
|
|
}
|