v2math.cpp

Go to the documentation of this file.
00001 
00032 #include "linden_common.h"
00033 
00034 //#include "vmath.h"
00035 #include "v2math.h"
00036 #include "v4math.h"
00037 #include "m4math.h"
00038 #include "m3math.h"
00039 #include "llquaternion.h"
00040 
00041 // LLVector2
00042 
00043 LLVector2 LLVector2::zero(0,0);
00044 
00045 
00046 // Non-member functions
00047 
00048 // Sets all values to absolute value of their original values
00049 // Returns TRUE if data changed
00050 BOOL LLVector2::abs()
00051 {
00052         BOOL ret = FALSE;
00053 
00054         if (mV[0] < 0.f) { mV[0] = -mV[0]; ret = TRUE; }
00055         if (mV[1] < 0.f) { mV[1] = -mV[1]; ret = TRUE; }
00056         
00057         return ret;
00058 }
00059 
00060 
00061 F32 angle_between(const LLVector2& a, const LLVector2& b)
00062 {
00063         LLVector2 an = a;
00064         LLVector2 bn = b;
00065         an.normVec();
00066         bn.normVec();
00067         F32 cosine = an * bn;
00068         F32 angle = (cosine >= 1.0f) ? 0.0f :
00069                                 (cosine <= -1.0f) ? F_PI :
00070                                 acos(cosine);
00071         return angle;
00072 }
00073 
00074 BOOL are_parallel(const LLVector2 &a, const LLVector2 &b, float epsilon)
00075 {
00076         LLVector2 an = a;
00077         LLVector2 bn = b;
00078         an.normVec();
00079         bn.normVec();
00080         F32 dot = an * bn;
00081         if ( (1.0f - fabs(dot)) < epsilon)
00082         {
00083                 return TRUE;
00084         }
00085         return FALSE;
00086 }
00087 
00088 
00089 F32     dist_vec(const LLVector2 &a, const LLVector2 &b)
00090 {
00091         F32 x = a.mV[0] - b.mV[0];
00092         F32 y = a.mV[1] - b.mV[1];
00093         return fsqrtf( x*x + y*y );
00094 }
00095 
00096 F32     dist_vec_squared(const LLVector2 &a, const LLVector2 &b)
00097 {
00098         F32 x = a.mV[0] - b.mV[0];
00099         F32 y = a.mV[1] - b.mV[1];
00100         return x*x + y*y;
00101 }
00102 
00103 F32     dist_vec_squared2D(const LLVector2 &a, const LLVector2 &b)
00104 {
00105         F32 x = a.mV[0] - b.mV[0];
00106         F32 y = a.mV[1] - b.mV[1];
00107         return x*x + y*y;
00108 }
00109 
00110 LLVector2 lerp(const LLVector2 &a, const LLVector2 &b, F32 u)
00111 {
00112         return LLVector2(
00113                 a.mV[VX] + (b.mV[VX] - a.mV[VX]) * u,
00114                 a.mV[VY] + (b.mV[VY] - a.mV[VY]) * u );
00115 }

Generated on Thu Jul 1 06:09:59 2010 for Second Life Viewer by  doxygen 1.4.7