summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/math/Vector2D.h12
-rw-r--r--src/math/math.cpp13
-rw-r--r--src/render/Skidmarks.cpp3
3 files changed, 22 insertions, 6 deletions
diff --git a/src/math/Vector2D.h b/src/math/Vector2D.h
index 705ad763..0885a5d2 100644
--- a/src/math/Vector2D.h
+++ b/src/math/Vector2D.h
@@ -11,16 +11,18 @@ public:
float Magnitude(void) const { return Sqrt(x*x + y*y); }
float MagnitudeSqr(void) const { return x*x + y*y; }
- void Normalise(void){
+ void Normalise(void);
+
+ void NormaliseSafe(void) {
float sq = MagnitudeSqr();
- //if(sq > 0.0f){
+ if(sq > 0.0f){
float invsqrt = RecipSqrt(sq);
x *= invsqrt;
y *= invsqrt;
- //}else
- // x = 1.0f;
+ }else
+ y = 1.0f;
}
-
+
const CVector2D &operator+=(CVector2D const &right) {
x += right.x;
y += right.y;
diff --git a/src/math/math.cpp b/src/math/math.cpp
index 4f74fac9..04fab797 100644
--- a/src/math/math.cpp
+++ b/src/math/math.cpp
@@ -5,6 +5,19 @@
// TODO: move more stuff into here
void
+CVector2D::Normalise(void)
+{
+ float sq = MagnitudeSqr();
+ assert(sq != 0.0f); // just be safe here
+ //if(sq > 0.0f){
+ float invsqrt = RecipSqrt(sq);
+ x *= invsqrt;
+ y *= invsqrt;
+ //}else
+ // x = 1.0f;
+}
+
+void
CMatrix::SetRotate(float xAngle, float yAngle, float zAngle)
{
float cX = Cos(xAngle);
diff --git a/src/render/Skidmarks.cpp b/src/render/Skidmarks.cpp
index 41ee5d1d..e003079e 100644
--- a/src/render/Skidmarks.cpp
+++ b/src/render/Skidmarks.cpp
@@ -214,7 +214,8 @@ CSkidmarks::RegisterOne(uintptr id, CVector pos, float fwdX, float fwdY, bool *i
aSkidmarks[i].m_pos[aSkidmarks[i].m_last] = pos;
CVector2D dist = aSkidmarks[i].m_pos[aSkidmarks[i].m_last] - aSkidmarks[i].m_pos[aSkidmarks[i].m_last-1];
- dist.Normalise();
+ dist.NormaliseSafe();
+ fwd.NormaliseSafe();
CVector2D right(dist.y, -dist.x);
float turn = DotProduct2D(fwd, right);
turn = Abs(turn) + 1.0f;