Simple Vector Library 1.5 http://www.cs.cmu.edu/~ajw/doc/svl.html

Committer:
BartJanssens
Date:
Tue Jan 05 13:37:50 2016 +0000
Revision:
1:e25ff4b06ed2
Parent:
0:785cff1e5a7c
fixed va_list bug

Who changed what in which revision?

UserRevisionLine numberNew contents of line
BartJanssens 0:785cff1e5a7c 1 /*
BartJanssens 0:785cff1e5a7c 2 File: Vec4.h
BartJanssens 0:785cff1e5a7c 3
BartJanssens 0:785cff1e5a7c 4 Function: Defines a length-4 vector.
BartJanssens 0:785cff1e5a7c 5
BartJanssens 0:785cff1e5a7c 6 Author(s): Andrew Willmott
BartJanssens 0:785cff1e5a7c 7
BartJanssens 0:785cff1e5a7c 8 Copyright: (c) 1995-2001, Andrew Willmott
BartJanssens 0:785cff1e5a7c 9 */
BartJanssens 0:785cff1e5a7c 10
BartJanssens 0:785cff1e5a7c 11 #ifndef __Vec4__
BartJanssens 0:785cff1e5a7c 12 #define __Vec4__
BartJanssens 0:785cff1e5a7c 13
BartJanssens 0:785cff1e5a7c 14 #include "Vec3.h"
BartJanssens 0:785cff1e5a7c 15
BartJanssens 0:785cff1e5a7c 16
BartJanssens 0:785cff1e5a7c 17 // --- Vec4 Class -------------------------------------------------------------
BartJanssens 0:785cff1e5a7c 18
BartJanssens 0:785cff1e5a7c 19 class Vec4
BartJanssens 0:785cff1e5a7c 20 {
BartJanssens 0:785cff1e5a7c 21 public:
BartJanssens 0:785cff1e5a7c 22
BartJanssens 0:785cff1e5a7c 23 // Constructors
BartJanssens 0:785cff1e5a7c 24
BartJanssens 0:785cff1e5a7c 25 Vec4();
BartJanssens 0:785cff1e5a7c 26 Vec4(Real x, Real y, Real z, Real w); // [x, y, z, w]
BartJanssens 0:785cff1e5a7c 27 Vec4(const Vec4 &v); // Copy constructor
BartJanssens 0:785cff1e5a7c 28 Vec4(const Vec3 &v, Real w); // Hom. 3D vector
BartJanssens 0:785cff1e5a7c 29 Vec4(ZeroOrOne k);
BartJanssens 0:785cff1e5a7c 30 Vec4(Axis k);
BartJanssens 0:785cff1e5a7c 31
BartJanssens 0:785cff1e5a7c 32 // Accessor functions
BartJanssens 0:785cff1e5a7c 33
BartJanssens 0:785cff1e5a7c 34 Int Elts() const { return(4); };
BartJanssens 0:785cff1e5a7c 35
BartJanssens 0:785cff1e5a7c 36 Real &operator [] (Int i);
BartJanssens 0:785cff1e5a7c 37 const Real &operator [] (Int i) const;
BartJanssens 0:785cff1e5a7c 38
BartJanssens 0:785cff1e5a7c 39 Real *Ref() const; // Return pointer to data
BartJanssens 0:785cff1e5a7c 40
BartJanssens 0:785cff1e5a7c 41 // Assignment operators
BartJanssens 0:785cff1e5a7c 42
BartJanssens 0:785cff1e5a7c 43 Vec4 &operator = (const Vec4 &a);
BartJanssens 0:785cff1e5a7c 44 Vec4 &operator = (ZeroOrOne k);
BartJanssens 0:785cff1e5a7c 45 Vec4 &operator = (Axis k);
BartJanssens 0:785cff1e5a7c 46 Vec4 &operator += (const Vec4 &a);
BartJanssens 0:785cff1e5a7c 47 Vec4 &operator -= (const Vec4 &a);
BartJanssens 0:785cff1e5a7c 48 Vec4 &operator *= (const Vec4 &a);
BartJanssens 0:785cff1e5a7c 49 Vec4 &operator *= (Real s);
BartJanssens 0:785cff1e5a7c 50 Vec4 &operator /= (const Vec4 &a);
BartJanssens 0:785cff1e5a7c 51 Vec4 &operator /= (Real s);
BartJanssens 0:785cff1e5a7c 52
BartJanssens 0:785cff1e5a7c 53 // Comparison operators
BartJanssens 0:785cff1e5a7c 54
BartJanssens 0:785cff1e5a7c 55 Bool operator == (const Vec4 &a) const; // v == a ?
BartJanssens 0:785cff1e5a7c 56 Bool operator != (const Vec4 &a) const; // v != a ?
BartJanssens 0:785cff1e5a7c 57
BartJanssens 0:785cff1e5a7c 58 // Arithmetic operators
BartJanssens 0:785cff1e5a7c 59
BartJanssens 0:785cff1e5a7c 60 Vec4 operator + (const Vec4 &a) const; // v + a
BartJanssens 0:785cff1e5a7c 61 Vec4 operator - (const Vec4 &a) const; // v - a
BartJanssens 0:785cff1e5a7c 62 Vec4 operator - () const; // -v
BartJanssens 0:785cff1e5a7c 63 Vec4 operator * (const Vec4 &a) const; // v * a (vx * ax, ...)
BartJanssens 0:785cff1e5a7c 64 Vec4 operator * (Real s) const; // v * s
BartJanssens 0:785cff1e5a7c 65 Vec4 operator / (const Vec4 &a) const; // v / a (vx / ax, ...)
BartJanssens 0:785cff1e5a7c 66 Vec4 operator / (Real s) const; // v / s
BartJanssens 0:785cff1e5a7c 67
BartJanssens 0:785cff1e5a7c 68
BartJanssens 0:785cff1e5a7c 69 // Initialisers
BartJanssens 0:785cff1e5a7c 70
BartJanssens 0:785cff1e5a7c 71 Vec4 &MakeZero(); // Zero vector
BartJanssens 0:785cff1e5a7c 72 Vec4 &MakeUnit(Int i, Real k = vl_one); // kI[i]
BartJanssens 0:785cff1e5a7c 73 Vec4 &MakeBlock(Real k = vl_one); // All-k vector
BartJanssens 0:785cff1e5a7c 74
BartJanssens 0:785cff1e5a7c 75 Vec4 &Normalise(); // normalise vector
BartJanssens 0:785cff1e5a7c 76
BartJanssens 0:785cff1e5a7c 77 // Private...
BartJanssens 0:785cff1e5a7c 78
BartJanssens 0:785cff1e5a7c 79 protected:
BartJanssens 0:785cff1e5a7c 80
BartJanssens 0:785cff1e5a7c 81 Real elt[4];
BartJanssens 0:785cff1e5a7c 82 };
BartJanssens 0:785cff1e5a7c 83
BartJanssens 0:785cff1e5a7c 84
BartJanssens 0:785cff1e5a7c 85 // --- Vec operators ----------------------------------------------------------
BartJanssens 0:785cff1e5a7c 86
BartJanssens 0:785cff1e5a7c 87 inline Vec4 operator * (Real s, const Vec4 &v); // Left mult. by s
BartJanssens 0:785cff1e5a7c 88 inline Real dot(const Vec4 &a, const Vec4 &b); // v . a
BartJanssens 0:785cff1e5a7c 89 inline Real len(const Vec4 &v); // || v ||
BartJanssens 0:785cff1e5a7c 90 inline Real sqrlen(const Vec4 &v); // v . v
BartJanssens 0:785cff1e5a7c 91 inline Vec4 norm(const Vec4 &v); // v / || v ||
BartJanssens 0:785cff1e5a7c 92 inline Void normalise(Vec4 &v); // v = norm(v)
BartJanssens 0:785cff1e5a7c 93 Vec4 cross(const Vec4 &a, const Vec4 &b, const Vec4 &c);
BartJanssens 0:785cff1e5a7c 94 // 4D cross prod.
BartJanssens 0:785cff1e5a7c 95 Vec3 proj(const Vec4 &v); // hom. projection
BartJanssens 0:785cff1e5a7c 96
BartJanssens 0:785cff1e5a7c 97 //std::ostream &operator << (std::ostream &s, const Vec4 &v);
BartJanssens 0:785cff1e5a7c 98 //std::istream &operator >> (std::istream &s, Vec4 &v);
BartJanssens 0:785cff1e5a7c 99
BartJanssens 0:785cff1e5a7c 100 inline void printVec4(const Vec4 &v);
BartJanssens 0:785cff1e5a7c 101
BartJanssens 0:785cff1e5a7c 102
BartJanssens 0:785cff1e5a7c 103 // --- Inlines ----------------------------------------------------------------
BartJanssens 0:785cff1e5a7c 104
BartJanssens 0:785cff1e5a7c 105 inline Real &Vec4::operator [] (Int i)
BartJanssens 0:785cff1e5a7c 106 {
BartJanssens 0:785cff1e5a7c 107 CheckRange(i, 0, 4, "(Vec4::[i]) index out of range");
BartJanssens 0:785cff1e5a7c 108 return(elt[i]);
BartJanssens 0:785cff1e5a7c 109 }
BartJanssens 0:785cff1e5a7c 110
BartJanssens 0:785cff1e5a7c 111 inline const Real &Vec4::operator [] (Int i) const
BartJanssens 0:785cff1e5a7c 112 {
BartJanssens 0:785cff1e5a7c 113 CheckRange(i, 0, 4, "(Vec4::[i]) index out of range");
BartJanssens 0:785cff1e5a7c 114 return(elt[i]);
BartJanssens 0:785cff1e5a7c 115 }
BartJanssens 0:785cff1e5a7c 116
BartJanssens 0:785cff1e5a7c 117
BartJanssens 0:785cff1e5a7c 118 inline Vec4::Vec4()
BartJanssens 0:785cff1e5a7c 119 {
BartJanssens 0:785cff1e5a7c 120 }
BartJanssens 0:785cff1e5a7c 121
BartJanssens 0:785cff1e5a7c 122 inline Vec4::Vec4(Real x, Real y, Real z, Real w)
BartJanssens 0:785cff1e5a7c 123 {
BartJanssens 0:785cff1e5a7c 124 elt[0] = x;
BartJanssens 0:785cff1e5a7c 125 elt[1] = y;
BartJanssens 0:785cff1e5a7c 126 elt[2] = z;
BartJanssens 0:785cff1e5a7c 127 elt[3] = w;
BartJanssens 0:785cff1e5a7c 128 }
BartJanssens 0:785cff1e5a7c 129
BartJanssens 0:785cff1e5a7c 130 inline Vec4::Vec4(const Vec4 &v)
BartJanssens 0:785cff1e5a7c 131 {
BartJanssens 0:785cff1e5a7c 132 elt[0] = v[0];
BartJanssens 0:785cff1e5a7c 133 elt[1] = v[1];
BartJanssens 0:785cff1e5a7c 134 elt[2] = v[2];
BartJanssens 0:785cff1e5a7c 135 elt[3] = v[3];
BartJanssens 0:785cff1e5a7c 136 }
BartJanssens 0:785cff1e5a7c 137
BartJanssens 0:785cff1e5a7c 138 inline Vec4::Vec4(const Vec3 &v, Real w)
BartJanssens 0:785cff1e5a7c 139 {
BartJanssens 0:785cff1e5a7c 140 elt[0] = v[0];
BartJanssens 0:785cff1e5a7c 141 elt[1] = v[1];
BartJanssens 0:785cff1e5a7c 142 elt[2] = v[2];
BartJanssens 0:785cff1e5a7c 143 elt[3] = w;
BartJanssens 0:785cff1e5a7c 144 }
BartJanssens 0:785cff1e5a7c 145
BartJanssens 0:785cff1e5a7c 146 inline Real *Vec4::Ref() const
BartJanssens 0:785cff1e5a7c 147 {
BartJanssens 0:785cff1e5a7c 148 return((Real *) elt);
BartJanssens 0:785cff1e5a7c 149 }
BartJanssens 0:785cff1e5a7c 150
BartJanssens 0:785cff1e5a7c 151 inline Vec4 &Vec4::operator = (const Vec4 &v)
BartJanssens 0:785cff1e5a7c 152 {
BartJanssens 0:785cff1e5a7c 153 elt[0] = v[0];
BartJanssens 0:785cff1e5a7c 154 elt[1] = v[1];
BartJanssens 0:785cff1e5a7c 155 elt[2] = v[2];
BartJanssens 0:785cff1e5a7c 156 elt[3] = v[3];
BartJanssens 0:785cff1e5a7c 157
BartJanssens 0:785cff1e5a7c 158 return(SELF);
BartJanssens 0:785cff1e5a7c 159 }
BartJanssens 0:785cff1e5a7c 160
BartJanssens 0:785cff1e5a7c 161 inline Vec4 &Vec4::operator += (const Vec4 &v)
BartJanssens 0:785cff1e5a7c 162 {
BartJanssens 0:785cff1e5a7c 163 elt[0] += v[0];
BartJanssens 0:785cff1e5a7c 164 elt[1] += v[1];
BartJanssens 0:785cff1e5a7c 165 elt[2] += v[2];
BartJanssens 0:785cff1e5a7c 166 elt[3] += v[3];
BartJanssens 0:785cff1e5a7c 167
BartJanssens 0:785cff1e5a7c 168 return(SELF);
BartJanssens 0:785cff1e5a7c 169 }
BartJanssens 0:785cff1e5a7c 170
BartJanssens 0:785cff1e5a7c 171 inline Vec4 &Vec4::operator -= (const Vec4 &v)
BartJanssens 0:785cff1e5a7c 172 {
BartJanssens 0:785cff1e5a7c 173 elt[0] -= v[0];
BartJanssens 0:785cff1e5a7c 174 elt[1] -= v[1];
BartJanssens 0:785cff1e5a7c 175 elt[2] -= v[2];
BartJanssens 0:785cff1e5a7c 176 elt[3] -= v[3];
BartJanssens 0:785cff1e5a7c 177
BartJanssens 0:785cff1e5a7c 178 return(SELF);
BartJanssens 0:785cff1e5a7c 179 }
BartJanssens 0:785cff1e5a7c 180
BartJanssens 0:785cff1e5a7c 181 inline Vec4 &Vec4::operator *= (const Vec4 &v)
BartJanssens 0:785cff1e5a7c 182 {
BartJanssens 0:785cff1e5a7c 183 elt[0] *= v[0];
BartJanssens 0:785cff1e5a7c 184 elt[1] *= v[1];
BartJanssens 0:785cff1e5a7c 185 elt[2] *= v[2];
BartJanssens 0:785cff1e5a7c 186 elt[3] *= v[3];
BartJanssens 0:785cff1e5a7c 187
BartJanssens 0:785cff1e5a7c 188 return(SELF);
BartJanssens 0:785cff1e5a7c 189 }
BartJanssens 0:785cff1e5a7c 190
BartJanssens 0:785cff1e5a7c 191 inline Vec4 &Vec4::operator *= (Real s)
BartJanssens 0:785cff1e5a7c 192 {
BartJanssens 0:785cff1e5a7c 193 elt[0] *= s;
BartJanssens 0:785cff1e5a7c 194 elt[1] *= s;
BartJanssens 0:785cff1e5a7c 195 elt[2] *= s;
BartJanssens 0:785cff1e5a7c 196 elt[3] *= s;
BartJanssens 0:785cff1e5a7c 197
BartJanssens 0:785cff1e5a7c 198 return(SELF);
BartJanssens 0:785cff1e5a7c 199 }
BartJanssens 0:785cff1e5a7c 200
BartJanssens 0:785cff1e5a7c 201 inline Vec4 &Vec4::operator /= (const Vec4 &v)
BartJanssens 0:785cff1e5a7c 202 {
BartJanssens 0:785cff1e5a7c 203 elt[0] /= v[0];
BartJanssens 0:785cff1e5a7c 204 elt[1] /= v[1];
BartJanssens 0:785cff1e5a7c 205 elt[2] /= v[2];
BartJanssens 0:785cff1e5a7c 206 elt[3] /= v[3];
BartJanssens 0:785cff1e5a7c 207
BartJanssens 0:785cff1e5a7c 208 return(SELF);
BartJanssens 0:785cff1e5a7c 209 }
BartJanssens 0:785cff1e5a7c 210
BartJanssens 0:785cff1e5a7c 211 inline Vec4 &Vec4::operator /= (Real s)
BartJanssens 0:785cff1e5a7c 212 {
BartJanssens 0:785cff1e5a7c 213 elt[0] /= s;
BartJanssens 0:785cff1e5a7c 214 elt[1] /= s;
BartJanssens 0:785cff1e5a7c 215 elt[2] /= s;
BartJanssens 0:785cff1e5a7c 216 elt[3] /= s;
BartJanssens 0:785cff1e5a7c 217
BartJanssens 0:785cff1e5a7c 218 return(SELF);
BartJanssens 0:785cff1e5a7c 219 }
BartJanssens 0:785cff1e5a7c 220
BartJanssens 0:785cff1e5a7c 221
BartJanssens 0:785cff1e5a7c 222 inline Vec4 Vec4::operator + (const Vec4 &a) const
BartJanssens 0:785cff1e5a7c 223 {
BartJanssens 0:785cff1e5a7c 224 Vec4 result;
BartJanssens 0:785cff1e5a7c 225
BartJanssens 0:785cff1e5a7c 226 result[0] = elt[0] + a[0];
BartJanssens 0:785cff1e5a7c 227 result[1] = elt[1] + a[1];
BartJanssens 0:785cff1e5a7c 228 result[2] = elt[2] + a[2];
BartJanssens 0:785cff1e5a7c 229 result[3] = elt[3] + a[3];
BartJanssens 0:785cff1e5a7c 230
BartJanssens 0:785cff1e5a7c 231 return(result);
BartJanssens 0:785cff1e5a7c 232 }
BartJanssens 0:785cff1e5a7c 233
BartJanssens 0:785cff1e5a7c 234 inline Vec4 Vec4::operator - (const Vec4 &a) const
BartJanssens 0:785cff1e5a7c 235 {
BartJanssens 0:785cff1e5a7c 236 Vec4 result;
BartJanssens 0:785cff1e5a7c 237
BartJanssens 0:785cff1e5a7c 238 result[0] = elt[0] - a[0];
BartJanssens 0:785cff1e5a7c 239 result[1] = elt[1] - a[1];
BartJanssens 0:785cff1e5a7c 240 result[2] = elt[2] - a[2];
BartJanssens 0:785cff1e5a7c 241 result[3] = elt[3] - a[3];
BartJanssens 0:785cff1e5a7c 242
BartJanssens 0:785cff1e5a7c 243 return(result);
BartJanssens 0:785cff1e5a7c 244 }
BartJanssens 0:785cff1e5a7c 245
BartJanssens 0:785cff1e5a7c 246 inline Vec4 Vec4::operator - () const
BartJanssens 0:785cff1e5a7c 247 {
BartJanssens 0:785cff1e5a7c 248 Vec4 result;
BartJanssens 0:785cff1e5a7c 249
BartJanssens 0:785cff1e5a7c 250 result[0] = -elt[0];
BartJanssens 0:785cff1e5a7c 251 result[1] = -elt[1];
BartJanssens 0:785cff1e5a7c 252 result[2] = -elt[2];
BartJanssens 0:785cff1e5a7c 253 result[3] = -elt[3];
BartJanssens 0:785cff1e5a7c 254
BartJanssens 0:785cff1e5a7c 255 return(result);
BartJanssens 0:785cff1e5a7c 256 }
BartJanssens 0:785cff1e5a7c 257
BartJanssens 0:785cff1e5a7c 258 inline Vec4 Vec4::operator * (const Vec4 &a) const
BartJanssens 0:785cff1e5a7c 259 {
BartJanssens 0:785cff1e5a7c 260 Vec4 result;
BartJanssens 0:785cff1e5a7c 261
BartJanssens 0:785cff1e5a7c 262 result[0] = elt[0] * a[0];
BartJanssens 0:785cff1e5a7c 263 result[1] = elt[1] * a[1];
BartJanssens 0:785cff1e5a7c 264 result[2] = elt[2] * a[2];
BartJanssens 0:785cff1e5a7c 265 result[3] = elt[3] * a[3];
BartJanssens 0:785cff1e5a7c 266
BartJanssens 0:785cff1e5a7c 267 return(result);
BartJanssens 0:785cff1e5a7c 268 }
BartJanssens 0:785cff1e5a7c 269
BartJanssens 0:785cff1e5a7c 270 inline Vec4 Vec4::operator * (Real s) const
BartJanssens 0:785cff1e5a7c 271 {
BartJanssens 0:785cff1e5a7c 272 Vec4 result;
BartJanssens 0:785cff1e5a7c 273
BartJanssens 0:785cff1e5a7c 274 result[0] = elt[0] * s;
BartJanssens 0:785cff1e5a7c 275 result[1] = elt[1] * s;
BartJanssens 0:785cff1e5a7c 276 result[2] = elt[2] * s;
BartJanssens 0:785cff1e5a7c 277 result[3] = elt[3] * s;
BartJanssens 0:785cff1e5a7c 278
BartJanssens 0:785cff1e5a7c 279 return(result);
BartJanssens 0:785cff1e5a7c 280 }
BartJanssens 0:785cff1e5a7c 281
BartJanssens 0:785cff1e5a7c 282 inline Vec4 Vec4::operator / (const Vec4 &a) const
BartJanssens 0:785cff1e5a7c 283 {
BartJanssens 0:785cff1e5a7c 284 Vec4 result;
BartJanssens 0:785cff1e5a7c 285
BartJanssens 0:785cff1e5a7c 286 result[0] = elt[0] / a[0];
BartJanssens 0:785cff1e5a7c 287 result[1] = elt[1] / a[1];
BartJanssens 0:785cff1e5a7c 288 result[2] = elt[2] / a[2];
BartJanssens 0:785cff1e5a7c 289 result[3] = elt[3] / a[3];
BartJanssens 0:785cff1e5a7c 290
BartJanssens 0:785cff1e5a7c 291 return(result);
BartJanssens 0:785cff1e5a7c 292 }
BartJanssens 0:785cff1e5a7c 293
BartJanssens 0:785cff1e5a7c 294 inline Vec4 Vec4::operator / (Real s) const
BartJanssens 0:785cff1e5a7c 295 {
BartJanssens 0:785cff1e5a7c 296 Vec4 result;
BartJanssens 0:785cff1e5a7c 297
BartJanssens 0:785cff1e5a7c 298 result[0] = elt[0] / s;
BartJanssens 0:785cff1e5a7c 299 result[1] = elt[1] / s;
BartJanssens 0:785cff1e5a7c 300 result[2] = elt[2] / s;
BartJanssens 0:785cff1e5a7c 301 result[3] = elt[3] / s;
BartJanssens 0:785cff1e5a7c 302
BartJanssens 0:785cff1e5a7c 303 return(result);
BartJanssens 0:785cff1e5a7c 304 }
BartJanssens 0:785cff1e5a7c 305
BartJanssens 0:785cff1e5a7c 306 inline Vec4 operator * (Real s, const Vec4 &v)
BartJanssens 0:785cff1e5a7c 307 {
BartJanssens 0:785cff1e5a7c 308 return(v * s);
BartJanssens 0:785cff1e5a7c 309 }
BartJanssens 0:785cff1e5a7c 310
BartJanssens 0:785cff1e5a7c 311 inline Vec4 &Vec4::MakeZero()
BartJanssens 0:785cff1e5a7c 312 {
BartJanssens 0:785cff1e5a7c 313 elt[0] = vl_zero; elt[1] = vl_zero; elt[2] = vl_zero; elt[3] = vl_zero;
BartJanssens 0:785cff1e5a7c 314 return(SELF);
BartJanssens 0:785cff1e5a7c 315 }
BartJanssens 0:785cff1e5a7c 316
BartJanssens 0:785cff1e5a7c 317 inline Vec4 &Vec4::MakeBlock(Real k)
BartJanssens 0:785cff1e5a7c 318 {
BartJanssens 0:785cff1e5a7c 319 elt[0] = k; elt[1] = k; elt[2] = k; elt[3] = k;
BartJanssens 0:785cff1e5a7c 320 return(SELF);
BartJanssens 0:785cff1e5a7c 321 }
BartJanssens 0:785cff1e5a7c 322
BartJanssens 0:785cff1e5a7c 323 inline Vec4 &Vec4::Normalise()
BartJanssens 0:785cff1e5a7c 324 {
BartJanssens 0:785cff1e5a7c 325 Assert(sqrlen(SELF) > 0.0, "normalising length-zero vector");
BartJanssens 0:785cff1e5a7c 326 SELF /= len(SELF);
BartJanssens 0:785cff1e5a7c 327 return(SELF);
BartJanssens 0:785cff1e5a7c 328 }
BartJanssens 0:785cff1e5a7c 329
BartJanssens 0:785cff1e5a7c 330 inline Vec4::Vec4(ZeroOrOne k)
BartJanssens 0:785cff1e5a7c 331 {
BartJanssens 0:785cff1e5a7c 332 MakeBlock(k);
BartJanssens 0:785cff1e5a7c 333 }
BartJanssens 0:785cff1e5a7c 334
BartJanssens 0:785cff1e5a7c 335 inline Vec4::Vec4(Axis k)
BartJanssens 0:785cff1e5a7c 336 {
BartJanssens 0:785cff1e5a7c 337 MakeUnit(k, vl_1);
BartJanssens 0:785cff1e5a7c 338 }
BartJanssens 0:785cff1e5a7c 339
BartJanssens 0:785cff1e5a7c 340 inline Vec4 &Vec4::operator = (ZeroOrOne k)
BartJanssens 0:785cff1e5a7c 341 {
BartJanssens 0:785cff1e5a7c 342 MakeBlock(k);
BartJanssens 0:785cff1e5a7c 343
BartJanssens 0:785cff1e5a7c 344 return(SELF);
BartJanssens 0:785cff1e5a7c 345 }
BartJanssens 0:785cff1e5a7c 346
BartJanssens 0:785cff1e5a7c 347 inline Vec4 &Vec4::operator = (Axis k)
BartJanssens 0:785cff1e5a7c 348 {
BartJanssens 0:785cff1e5a7c 349 MakeUnit(k, vl_1);
BartJanssens 0:785cff1e5a7c 350
BartJanssens 0:785cff1e5a7c 351 return(SELF);
BartJanssens 0:785cff1e5a7c 352 }
BartJanssens 0:785cff1e5a7c 353
BartJanssens 0:785cff1e5a7c 354
BartJanssens 0:785cff1e5a7c 355 inline Real dot(const Vec4 &a, const Vec4 &b)
BartJanssens 0:785cff1e5a7c 356 {
BartJanssens 0:785cff1e5a7c 357 return(a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3]);
BartJanssens 0:785cff1e5a7c 358 }
BartJanssens 0:785cff1e5a7c 359
BartJanssens 0:785cff1e5a7c 360 inline Real len(const Vec4 &v)
BartJanssens 0:785cff1e5a7c 361 {
BartJanssens 0:785cff1e5a7c 362 return(sqrt(dot(v, v)));
BartJanssens 0:785cff1e5a7c 363 }
BartJanssens 0:785cff1e5a7c 364
BartJanssens 0:785cff1e5a7c 365 inline Real sqrlen(const Vec4 &v)
BartJanssens 0:785cff1e5a7c 366 {
BartJanssens 0:785cff1e5a7c 367 return(dot(v, v));
BartJanssens 0:785cff1e5a7c 368 }
BartJanssens 0:785cff1e5a7c 369
BartJanssens 0:785cff1e5a7c 370 inline Vec4 norm(const Vec4 &v)
BartJanssens 0:785cff1e5a7c 371 {
BartJanssens 0:785cff1e5a7c 372 Assert(sqrlen(v) > 0.0, "normalising length-zero vector");
BartJanssens 0:785cff1e5a7c 373 return(v / len(v));
BartJanssens 0:785cff1e5a7c 374 }
BartJanssens 0:785cff1e5a7c 375
BartJanssens 0:785cff1e5a7c 376 inline Void normalise(Vec4 &v)
BartJanssens 0:785cff1e5a7c 377 {
BartJanssens 0:785cff1e5a7c 378 v /= len(v);
BartJanssens 0:785cff1e5a7c 379 }
BartJanssens 0:785cff1e5a7c 380
BartJanssens 0:785cff1e5a7c 381 inline void printVec4(const Vec4 &v)
BartJanssens 0:785cff1e5a7c 382 {
BartJanssens 0:785cff1e5a7c 383 printf("[%10f %10f %10f %10f]",v[0],v[1],v[2],v[3]);
BartJanssens 0:785cff1e5a7c 384 }
BartJanssens 0:785cff1e5a7c 385
BartJanssens 0:785cff1e5a7c 386 #endif