1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
|
/*
** Haaf's Game Engine 1.5
** Copyright (C) 2003-2004, Relish Games
** hge.relishgames.com
**
** hgeVector helper class implementation
*/
#include "hgevector.h"
namespace HGE {
float InvSqrt(float x)
{
union
{
int intPart;
float floatPart;
} convertor;
convertor.floatPart = x;
convertor.intPart = 0x5f3759df - (convertor.intPart >> 1);
return convertor.floatPart*(1.5f - 0.4999f*x*convertor.floatPart*convertor.floatPart);
}
};
using namespace HGE;
/*
hgeVector *hgeVector::Normalize()
{
float lenRcp;
lenRcp=sqrtf(Dot(this));
if(lenRcp)
{
lenRcp=1.0f/lenRcp;
x*=lenRcp;
y*=lenRcp;
}
return this;
}
*/
float hgeVector::Angle(const hgeVector *v) const
{
if(v)
{
hgeVector s=*this, t=*v;
s.Normalize(); t.Normalize();
return acosf(s.Dot(&t));
}
else return atan2f(y, x);
}
hgeVector *hgeVector::Rotate(float a)
{
hgeVector v;
v.x=x*cosf(a) - y*sinf(a);
v.y=x*sinf(a) + y*cosf(a);
x=v.x; y=v.y;
return this;
}
|