X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fvector.cpp;h=fe627cd329adb397f28c3447512dfcad265c6f02;hb=7fde5a077bc9bbce28662fa2e5aa5043f3b4747f;hp=1f4c29cc5ae5b69eedd639efaa5fa0a6bc56883c;hpb=cf3ec188764cdf34ff3472ee9806aba3a772d2df;p=ttedit diff --git a/src/vector.cpp b/src/vector.cpp index 1f4c29c..fe627cd 100755 --- a/src/vector.cpp +++ b/src/vector.cpp @@ -9,7 +9,7 @@ // JLH = James L. Hammons // // Who When What -// --- ---------- ------------------------------------------------------------- +// --- ---------- ----------------------------------------------------------- // JLH ??/??/2003 Created original implementation // JLH 05/14/2004 Separated header from implementation, added operator- // function @@ -153,7 +153,7 @@ void vector::zero(const double epsilon/*= 1.0e-6*/) // JLH = James L. Hammons // // WHO WHEN WHAT -// --- ---------- ------------------------------------------------------------ +// --- ---------- ---------------------------------------------------------- // JLH 09/19/2006 Created this file // JLH 03/22/2011 Moved implementation of constructor from header to here // JLH 04/02/2011 Fixed divide-by-zero bug in Unit(), added Angle() function @@ -323,14 +323,14 @@ Vector& Vector::operator-=(double const v) // Check for equality bool Vector::operator==(Vector const v) { - return (x == v.x && y == v.y && z == v.z ? true : false); + return ((x == v.x) && (y == v.y) && (z == v.z) ? true : false); } // Check for inequality bool Vector::operator!=(Vector const v) { - return (x != v.x || y != v.y || z != v.z ? true : false); + return ((x != v.x) || (y != v.y) || (z != v.z) ? true : false); } @@ -348,7 +348,7 @@ Vector Vector::Unit(void) double Vector::Magnitude(void) { - return sqrt(x * x + y * y + z * z); + return sqrt((x * x) + (y * y) + (z * z)); } @@ -365,17 +365,26 @@ double Vector::Angle(void) // -// Angle between these two vectors +// Returns the smallest angle between these two vectors // double Vector::Angle(Vector v) { +// seems that something relies on this bad behavior... :-P +#if 0 + // Discard the sign from the subtraction + double angle = fabs(Angle() - v.Angle()); + + // Return the complementary angle if greater than 180⁰ + return (angle <= 180.0 ? angle : 360.0 - angle); +#else return Angle() - v.Angle(); +#endif } bool Vector::isZero(double epsilon/*= 1e-6*/) { - return (fabs(x) < epsilon && fabs(y) < epsilon && fabs(z) < epsilon ? true : false); + return ((fabs(x) < epsilon) && (fabs(y) < epsilon) && (fabs(z) < epsilon) ? true : false); } @@ -392,7 +401,7 @@ double Vector::Magnitude(Vector v1, Vector v2) double xx = v1.x - v2.x; double yy = v1.y - v2.y; double zz = v1.z - v2.z; - return sqrt(xx * xx + yy * yy + zz * zz); + return sqrt((xx * xx) + (yy * yy) + (zz * zz)); } #endif