59 lines
953 B
C++
59 lines
953 B
C++
#include "vec.h"
|
|
#include "util.h"
|
|
#include <cmath>
|
|
|
|
|
|
void VectorNormalize(Vector &v)
|
|
{
|
|
float length = VectorLength(v);
|
|
|
|
// zero length
|
|
if (length == 0.0f)
|
|
{
|
|
v.x = 0.0f;
|
|
v.y = 0.0f;
|
|
v.z = 0.0f;
|
|
}
|
|
else
|
|
{
|
|
float lengthInv = 1.0f / length;
|
|
|
|
v.x *= lengthInv;
|
|
v.y *= lengthInv;
|
|
v.z *= lengthInv;
|
|
}
|
|
}
|
|
|
|
float VectorLength(Vector &v)
|
|
{
|
|
float result = sqrtf(v.x * v.x + v.y * v.y + v.z * v.z);
|
|
|
|
// zero length
|
|
if (result < EPSILON_E3)
|
|
{
|
|
result = 0.0f;
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
float VectorDot(Vector &v1, Vector &v2)
|
|
{
|
|
float result;
|
|
|
|
result = (v1.x * v2.x) + (v1.y * v2.y) + (v1.z * v2.z);
|
|
|
|
return result;
|
|
}
|
|
|
|
Vector VectorCross(Vector &v1, Vector &v2)
|
|
{
|
|
Vector result;
|
|
|
|
result.x = (v1.y * v2.z) - (v1.z * v2.y);
|
|
result.y = (v1.z * v2.x) - (v1.x * v2.z);
|
|
result.z = (v1.x * v2.y) - (v1.y * v2.x);
|
|
|
|
return result;
|
|
}
|