2 FLUIDS v.1 - SPH Fluid Simulator for CPU and GPU
3 Copyright (C) 2009. Rama Hoetzlein, http://www.rchoetzlein.com
6 This software is provided 'as-is', without any express or implied
7 warranty. In no event will the authors be held liable for any damages
8 arising from the use of this software.
10 Permission is granted to anyone to use this software for any purpose,
11 including commercial applications, and to alter it and redistribute it
12 freely, subject to the following restrictions:
14 1. The origin of this software must not be misrepresented; you must not
15 claim that you wrote the original software. If you use this software
16 in a product, an acknowledgment in the product documentation would be
17 appreciated but is not required.
18 2. Altered source versions must be plainly marked as such, and must not be
19 misrepresented as being the original software.
20 3. This notice may not be removed or altered from any source distribution.
23 // Vector code CANNOT be inlined in header file because of dependencies
24 // across vector classes (error generated: "Use of undeclared class..")
35 //#define VECTOR_INITIALIZE // Initializes vectors
37 class Vector2DC; // Forward Referencing
47 // Vector2DC Declaration
50 #define VTYPE unsigned char
56 // Constructors/Destructors
59 inline Vector2DC (VTYPE xa, VTYPE ya);
60 inline Vector2DC (Vector2DC &op);
61 inline Vector2DC (Vector2DI &op);
62 inline Vector2DC (Vector2DF &op);
63 inline Vector2DC (Vector3DC &op);
64 inline Vector2DC (Vector3DI &op);
65 inline Vector2DC (Vector3DF &op);
66 inline Vector2DC (Vector4DF &op);
69 inline Vector2DC &operator= (Vector2DC &op);
70 inline Vector2DC &operator= (Vector2DI &op);
71 inline Vector2DC &operator= (Vector2DF &op);
72 inline Vector2DC &operator= (Vector3DC &op);
73 inline Vector2DC &operator= (Vector3DI &op);
74 inline Vector2DC &operator= (Vector3DF &op);
75 inline Vector2DC &operator= (Vector4DF &op);
77 inline Vector2DC &operator+= (Vector2DC &op);
78 inline Vector2DC &operator+= (Vector2DI &op);
79 inline Vector2DC &operator+= (Vector2DF &op);
80 inline Vector2DC &operator+= (Vector3DC &op);
81 inline Vector2DC &operator+= (Vector3DI &op);
82 inline Vector2DC &operator+= (Vector3DF &op);
83 inline Vector2DC &operator+= (Vector4DF &op);
85 inline Vector2DC &operator-= (Vector2DC &op);
86 inline Vector2DC &operator-= (Vector2DI &op);
87 inline Vector2DC &operator-= (Vector2DF &op);
88 inline Vector2DC &operator-= (Vector3DC &op);
89 inline Vector2DC &operator-= (Vector3DI &op);
90 inline Vector2DC &operator-= (Vector3DF &op);
91 inline Vector2DC &operator-= (Vector4DF &op);
93 inline Vector2DC &operator*= (Vector2DC &op);
94 inline Vector2DC &operator*= (Vector2DI &op);
95 inline Vector2DC &operator*= (Vector2DF &op);
96 inline Vector2DC &operator*= (Vector3DC &op);
97 inline Vector2DC &operator*= (Vector3DI &op);
98 inline Vector2DC &operator*= (Vector3DF &op);
99 inline Vector2DC &operator*= (Vector4DF &op);
101 inline Vector2DC &operator/= (Vector2DC &op);
102 inline Vector2DC &operator/= (Vector2DI &op);
103 inline Vector2DC &operator/= (Vector2DF &op);
104 inline Vector2DC &operator/= (Vector3DC &op);
105 inline Vector2DC &operator/= (Vector3DI &op);
106 inline Vector2DC &operator/= (Vector3DF &op);
107 inline Vector2DC &operator/= (Vector4DF &op);
109 // Note: Cross product does not exist for 2D vectors (only 3D)
111 inline double Dot(Vector2DC &v);
112 inline double Dot(Vector2DI &v);
113 inline double Dot(Vector2DF &v);
115 inline double Dist (Vector2DC &v);
116 inline double Dist (Vector2DI &v);
117 inline double Dist (Vector2DF &v);
118 inline double Dist (Vector3DC &v);
119 inline double Dist (Vector3DI &v);
120 inline double Dist (Vector3DF &v);
121 inline double Dist (Vector4DF &v);
123 inline double DistSq (Vector2DC &v);
124 inline double DistSq (Vector2DI &v);
125 inline double DistSq (Vector2DF &v);
126 inline double DistSq (Vector3DC &v);
127 inline double DistSq (Vector3DI &v);
128 inline double DistSq (Vector3DF &v);
129 inline double DistSq (Vector4DF &v);
131 inline Vector2DC &Normalize (void);
132 inline double Length (void);
134 inline VTYPE &X(void);
135 inline VTYPE &Y(void);
136 inline VTYPE Z(void);
137 inline VTYPE W(void);
138 inline const VTYPE &X(void) const;
139 inline const VTYPE &Y(void) const;
140 inline const VTYPE Z(void) const;
141 inline const VTYPE W(void) const;
142 inline VTYPE *Data (void);
148 // Vector2DI Declaration
157 // Constructors/Destructors
160 inline Vector2DI (VTYPE xa, VTYPE ya);
161 inline Vector2DI (Vector2DC &op);
162 inline Vector2DI (Vector2DI &op);
163 inline Vector2DI (Vector2DF &op);
164 inline Vector2DI (Vector3DC &op);
165 inline Vector2DI (Vector3DI &op);
166 inline Vector2DI (Vector3DF &op);
167 inline Vector2DI (Vector4DF &op);
170 inline Vector2DI &operator= (Vector2DC &op);
171 inline Vector2DI &operator= (Vector2DI &op);
172 inline Vector2DI &operator= (Vector2DF &op);
173 inline Vector2DI &operator= (Vector3DC &op);
174 inline Vector2DI &operator= (Vector3DI &op);
175 inline Vector2DI &operator= (Vector3DF &op);
176 inline Vector2DI &operator= (Vector4DF &op);
178 inline Vector2DI &operator+= (Vector2DC &op);
179 inline Vector2DI &operator+= (Vector2DI &op);
180 inline Vector2DI &operator+= (Vector2DF &op);
181 inline Vector2DI &operator+= (Vector3DC &op);
182 inline Vector2DI &operator+= (Vector3DI &op);
183 inline Vector2DI &operator+= (Vector3DF &op);
184 inline Vector2DI &operator+= (Vector4DF &op);
186 inline Vector2DI &operator-= (Vector2DC &op);
187 inline Vector2DI &operator-= (Vector2DI &op);
188 inline Vector2DI &operator-= (Vector2DF &op);
189 inline Vector2DI &operator-= (Vector3DC &op);
190 inline Vector2DI &operator-= (Vector3DI &op);
191 inline Vector2DI &operator-= (Vector3DF &op);
192 inline Vector2DI &operator-= (Vector4DF &op);
194 inline Vector2DI &operator*= (Vector2DC &op);
195 inline Vector2DI &operator*= (Vector2DI &op);
196 inline Vector2DI &operator*= (Vector2DF &op);
197 inline Vector2DI &operator*= (Vector3DC &op);
198 inline Vector2DI &operator*= (Vector3DI &op);
199 inline Vector2DI &operator*= (Vector3DF &op);
200 inline Vector2DI &operator*= (Vector4DF &op);
202 inline Vector2DI &operator/= (Vector2DC &op);
203 inline Vector2DI &operator/= (Vector2DI &op);
204 inline Vector2DI &operator/= (Vector2DF &op);
205 inline Vector2DI &operator/= (Vector3DC &op);
206 inline Vector2DI &operator/= (Vector3DI &op);
207 inline Vector2DI &operator/= (Vector3DF &op);
208 inline Vector2DI &operator/= (Vector4DF &op);
211 // Note: Cross product does not exist for 2D vectors (only 3D)
213 inline double Dot(Vector2DC &v);
214 inline double Dot(Vector2DI &v);
215 inline double Dot(Vector2DF &v);
217 inline double Dist (Vector2DC &v);
218 inline double Dist (Vector2DI &v);
219 inline double Dist (Vector2DF &v);
220 inline double Dist (Vector3DC &v);
221 inline double Dist (Vector3DI &v);
222 inline double Dist (Vector3DF &v);
223 inline double Dist (Vector4DF &v);
225 inline double DistSq (Vector2DC &v);
226 inline double DistSq (Vector2DI &v);
227 inline double DistSq (Vector2DF &v);
228 inline double DistSq (Vector3DC &v);
229 inline double DistSq (Vector3DI &v);
230 inline double DistSq (Vector3DF &v);
231 inline double DistSq (Vector4DF &v);
233 inline Vector2DI &Normalize (void);
234 inline double Length (void);
236 inline VTYPE &X(void);
237 inline VTYPE &Y(void);
238 inline VTYPE Z(void);
239 inline VTYPE W(void);
240 inline const VTYPE &X(void) const;
241 inline const VTYPE &Y(void) const;
242 inline const VTYPE Z(void) const;
243 inline const VTYPE W(void) const;
244 inline VTYPE *Data (void);
250 // Vector2DF Declarations
259 // Constructors/Destructors
262 Vector2DF (const VTYPE xa, const VTYPE ya);
263 Vector2DF (const Vector2DC &op);
264 Vector2DF (const Vector2DI &op);
265 Vector2DF (const Vector2DF &op);
266 Vector2DF (const Vector3DC &op);
267 Vector2DF (const Vector3DI &op);
268 Vector2DF (const Vector3DF &op);
269 Vector2DF (const Vector4DF &op);
272 Vector2DF &operator= (const Vector2DC &op);
273 Vector2DF &operator= (const Vector2DI &op);
274 Vector2DF &operator= (const Vector2DF &op);
275 Vector2DF &operator= (const Vector3DC &op);
276 Vector2DF &operator= (const Vector3DI &op);
277 Vector2DF &operator= (const Vector3DF &op);
278 Vector2DF &operator= (const Vector4DF &op);
280 Vector2DF &operator+= (const Vector2DC &op);
281 Vector2DF &operator+= (const Vector2DI &op);
282 Vector2DF &operator+= (const Vector2DF &op);
283 Vector2DF &operator+= (const Vector3DC &op);
284 Vector2DF &operator+= (const Vector3DI &op);
285 Vector2DF &operator+= (const Vector3DF &op);
286 Vector2DF &operator+= (const Vector4DF &op);
288 Vector2DF &operator-= (const Vector2DC &op);
289 Vector2DF &operator-= (const Vector2DI &op);
290 Vector2DF &operator-= (const Vector2DF &op);
291 Vector2DF &operator-= (const Vector3DC &op);
292 Vector2DF &operator-= (const Vector3DI &op);
293 Vector2DF &operator-= (const Vector3DF &op);
294 Vector2DF &operator-= (const Vector4DF &op);
296 Vector2DF &operator*= (const Vector2DC &op);
297 Vector2DF &operator*= (const Vector2DI &op);
298 Vector2DF &operator*= (const Vector2DF &op);
299 Vector2DF &operator*= (const Vector3DC &op);
300 Vector2DF &operator*= (const Vector3DI &op);
301 Vector2DF &operator*= (const Vector3DF &op);
302 Vector2DF &operator*= (const Vector4DF &op);
304 Vector2DF &operator/= (const Vector2DC &op);
305 Vector2DF &operator/= (const Vector2DI &op);
306 Vector2DF &operator/= (const Vector2DF &op);
307 Vector2DF &operator/= (const Vector3DC &op);
308 Vector2DF &operator/= (const Vector3DI &op);
309 Vector2DF &operator/= (const Vector3DF &op);
310 Vector2DF &operator/= (const Vector4DF &op);
312 Vector2DF &operator/= (const double v) {x /= v; y /= v; return *this;}
314 // Note: Cross product does not exist for 2D vectors (only 3D)
316 double Dot(const Vector2DC &v);
317 double Dot(const Vector2DI &v);
318 double Dot(const Vector2DF &v);
320 double Dist (const Vector2DC &v);
321 double Dist (const Vector2DI &v);
322 double Dist (const Vector2DF &v);
323 double Dist (const Vector3DC &v);
324 double Dist (const Vector3DI &v);
325 double Dist (const Vector3DF &v);
326 double Dist (const Vector4DF &v);
328 double DistSq (const Vector2DC &v);
329 double DistSq (const Vector2DI &v);
330 double DistSq (const Vector2DF &v);
331 double DistSq (const Vector3DC &v);
332 double DistSq (const Vector3DI &v);
333 double DistSq (const Vector3DF &v);
334 double DistSq (const Vector4DF &v);
336 Vector2DF &Normalize (void);
337 double Length (void);
343 const VTYPE &X(void) const;
344 const VTYPE &Y(void) const;
345 const VTYPE Z(void) const;
346 const VTYPE W(void) const;
353 // Vector3DC Declaration
356 #define VTYPE unsigned char
362 // Constructors/Destructors
365 inline Vector3DC (VTYPE xa, VTYPE ya, VTYPE za);
366 inline Vector3DC (Vector2DC &op);
367 inline Vector3DC (Vector2DI &op);
368 inline Vector3DC (Vector2DF &op);
369 inline Vector3DC (Vector3DC &op);
370 inline Vector3DC (Vector3DI &op);
371 inline Vector3DC (Vector3DF &op);
372 inline Vector3DC (Vector4DF &op);
375 inline Vector3DC &Set (VTYPE xa, VTYPE ya, VTYPE za);
377 inline Vector3DC &operator= (Vector2DC &op);
378 inline Vector3DC &operator= (Vector2DI &op);
379 inline Vector3DC &operator= (Vector2DF &op);
380 inline Vector3DC &operator= (Vector3DC &op);
381 inline Vector3DC &operator= (Vector3DI &op);
382 inline Vector3DC &operator= (Vector3DF &op);
383 inline Vector3DC &operator= (Vector4DF &op);
385 inline Vector3DC &operator+= (Vector2DC &op);
386 inline Vector3DC &operator+= (Vector2DI &op);
387 inline Vector3DC &operator+= (Vector2DF &op);
388 inline Vector3DC &operator+= (Vector3DC &op);
389 inline Vector3DC &operator+= (Vector3DI &op);
390 inline Vector3DC &operator+= (Vector3DF &op);
391 inline Vector3DC &operator+= (Vector4DF &op);
393 inline Vector3DC &operator-= (Vector2DC &op);
394 inline Vector3DC &operator-= (Vector2DI &op);
395 inline Vector3DC &operator-= (Vector2DF &op);
396 inline Vector3DC &operator-= (Vector3DC &op);
397 inline Vector3DC &operator-= (Vector3DI &op);
398 inline Vector3DC &operator-= (Vector3DF &op);
399 inline Vector3DC &operator-= (Vector4DF &op);
401 inline Vector3DC &operator*= (Vector2DC &op);
402 inline Vector3DC &operator*= (Vector2DI &op);
403 inline Vector3DC &operator*= (Vector2DF &op);
404 inline Vector3DC &operator*= (Vector3DC &op);
405 inline Vector3DC &operator*= (Vector3DI &op);
406 inline Vector3DC &operator*= (Vector3DF &op);
407 inline Vector3DC &operator*= (Vector4DF &op);
409 inline Vector3DC &operator/= (Vector2DC &op);
410 inline Vector3DC &operator/= (Vector2DI &op);
411 inline Vector3DC &operator/= (Vector2DF &op);
412 inline Vector3DC &operator/= (Vector3DC &op);
413 inline Vector3DC &operator/= (Vector3DI &op);
414 inline Vector3DC &operator/= (Vector3DF &op);
415 inline Vector3DC &operator/= (Vector4DF &op);
417 inline Vector3DC &Cross (Vector3DC &v);
418 inline Vector3DC &Cross (Vector3DI &v);
419 inline Vector3DC &Cross (Vector3DF &v);
421 inline double Dot(Vector3DC &v);
422 inline double Dot(Vector3DI &v);
423 inline double Dot(Vector3DF &v);
425 inline double Dist (Vector2DC &v);
426 inline double Dist (Vector2DI &v);
427 inline double Dist (Vector2DF &v);
428 inline double Dist (Vector3DC &v);
429 inline double Dist (Vector3DI &v);
430 inline double Dist (Vector3DF &v);
431 inline double Dist (Vector4DF &v);
433 inline double DistSq (Vector2DC &v);
434 inline double DistSq (Vector2DI &v);
435 inline double DistSq (Vector2DF &v);
436 inline double DistSq (Vector3DC &v);
437 inline double DistSq (Vector3DI &v);
438 inline double DistSq (Vector3DF &v);
439 inline double DistSq (Vector4DF &v);
441 inline Vector3DC &Normalize (void);
442 inline double Length (void);
444 inline VTYPE &X(void);
445 inline VTYPE &Y(void);
446 inline VTYPE &Z(void);
447 inline VTYPE W(void);
448 inline const VTYPE &X(void) const;
449 inline const VTYPE &Y(void) const;
450 inline const VTYPE &Z(void) const;
451 inline const VTYPE W(void) const;
452 inline VTYPE *Data (void);
458 // Vector3DI Declaration
467 // Constructors/Destructors
470 inline Vector3DI (VTYPE xa, VTYPE ya, VTYPE za);
471 inline Vector3DI (Vector2DC &op);
472 inline Vector3DI (Vector2DI &op);
473 inline Vector3DI (Vector2DF &op);
474 inline Vector3DI (Vector3DC &op);
475 inline Vector3DI (Vector3DI &op);
476 inline Vector3DI (Vector3DF &op);
477 inline Vector3DI (Vector4DF &op);
480 inline Vector3DI &Set (const int xa, const int ya, const int za);
483 inline Vector3DI &operator= (Vector2DC &op);
484 inline Vector3DI &operator= (Vector2DI &op);
485 inline Vector3DI &operator= (Vector2DF &op);
486 inline Vector3DI &operator= (Vector3DC &op);
487 inline Vector3DI &operator= (Vector3DI &op);
488 inline Vector3DI &operator= (Vector3DF &op);
489 inline Vector3DI &operator= (Vector4DF &op);
491 inline Vector3DI &operator+= (Vector2DC &op);
492 inline Vector3DI &operator+= (Vector2DI &op);
493 inline Vector3DI &operator+= (Vector2DF &op);
494 inline Vector3DI &operator+= (Vector3DC &op);
495 inline Vector3DI &operator+= (Vector3DI &op);
496 inline Vector3DI &operator+= (Vector3DF &op);
497 inline Vector3DI &operator+= (Vector4DF &op);
499 inline Vector3DI &operator-= (Vector2DC &op);
500 inline Vector3DI &operator-= (Vector2DI &op);
501 inline Vector3DI &operator-= (Vector2DF &op);
502 inline Vector3DI &operator-= (Vector3DC &op);
503 inline Vector3DI &operator-= (Vector3DI &op);
504 inline Vector3DI &operator-= (Vector3DF &op);
505 inline Vector3DI &operator-= (Vector4DF &op);
507 inline Vector3DI &operator*= (Vector2DC &op);
508 inline Vector3DI &operator*= (Vector2DI &op);
509 inline Vector3DI &operator*= (Vector2DF &op);
510 inline Vector3DI &operator*= (Vector3DC &op);
511 inline Vector3DI &operator*= (Vector3DI &op);
512 inline Vector3DI &operator*= (Vector3DF &op);
513 inline Vector3DI &operator*= (Vector4DF &op);
515 inline Vector3DI &operator/= (Vector2DC &op);
516 inline Vector3DI &operator/= (Vector2DI &op);
517 inline Vector3DI &operator/= (Vector2DF &op);
518 inline Vector3DI &operator/= (Vector3DC &op);
519 inline Vector3DI &operator/= (Vector3DI &op);
520 inline Vector3DI &operator/= (Vector3DF &op);
521 inline Vector3DI &operator/= (Vector4DF &op);
523 inline Vector3DI &Cross (Vector3DC &v);
524 inline Vector3DI &Cross (Vector3DI &v);
525 inline Vector3DI &Cross (Vector3DF &v);
527 inline double Dot(Vector3DC &v);
528 inline double Dot(Vector3DI &v);
529 inline double Dot(Vector3DF &v);
531 inline double Dist (Vector2DC &v);
532 inline double Dist (Vector2DI &v);
533 inline double Dist (Vector2DF &v);
534 inline double Dist (Vector3DC &v);
535 inline double Dist (Vector3DI &v);
536 inline double Dist (Vector3DF &v);
537 inline double Dist (Vector4DF &v);
539 inline double DistSq (Vector2DC &v);
540 inline double DistSq (Vector2DI &v);
541 inline double DistSq (Vector2DF &v);
542 inline double DistSq (Vector3DC &v);
543 inline double DistSq (Vector3DI &v);
544 inline double DistSq (Vector3DF &v);
545 inline double DistSq (Vector4DF &v);
547 inline Vector3DI &Normalize (void);
548 inline double Length (void);
550 inline VTYPE &X(void);
551 inline VTYPE &Y(void);
552 inline VTYPE &Z(void);
553 inline VTYPE W(void);
554 inline const VTYPE &X(void) const;
555 inline const VTYPE &Y(void) const;
556 inline const VTYPE &Z(void) const;
557 inline const VTYPE W(void) const;
558 inline VTYPE *Data (void);
564 // Vector3DF Declarations
573 // Constructors/Destructors
576 inline Vector3DF (const VTYPE xa, const VTYPE ya, const VTYPE za);
577 inline Vector3DF (const Vector2DC &op);
578 inline Vector3DF (const Vector2DI &op);
579 inline Vector3DF (const Vector2DF &op);
580 inline Vector3DF (const Vector3DC &op);
581 inline Vector3DF (const Vector3DI &op);
582 inline Vector3DF (const Vector3DF &op);
583 inline Vector3DF (const Vector4DF &op);
586 inline Vector3DF &Set (const double xa, const double ya, const double za);
589 inline Vector3DF &operator= (const int op);
590 inline Vector3DF &operator= (const double op);
591 inline Vector3DF &operator= (const Vector2DC &op);
592 inline Vector3DF &operator= (const Vector2DI &op);
593 inline Vector3DF &operator= (const Vector2DF &op);
594 inline Vector3DF &operator= (const Vector3DC &op);
595 inline Vector3DF &operator= (const Vector3DI &op);
596 inline Vector3DF &operator= (const Vector3DF &op);
597 inline Vector3DF &operator= (const Vector4DF &op);
599 inline Vector3DF &operator+= (const int op);
600 inline Vector3DF &operator+= (const double op);
601 inline Vector3DF &operator+= (const Vector2DC &op);
602 inline Vector3DF &operator+= (const Vector2DI &op);
603 inline Vector3DF &operator+= (const Vector2DF &op);
604 inline Vector3DF &operator+= (const Vector3DC &op);
605 inline Vector3DF &operator+= (const Vector3DI &op);
606 inline Vector3DF &operator+= (const Vector3DF &op);
607 inline Vector3DF &operator+= (const Vector4DF &op);
609 inline Vector3DF &operator-= (const int op);
610 inline Vector3DF &operator-= (const double op);
611 inline Vector3DF &operator-= (const Vector2DC &op);
612 inline Vector3DF &operator-= (const Vector2DI &op);
613 inline Vector3DF &operator-= (const Vector2DF &op);
614 inline Vector3DF &operator-= (const Vector3DC &op);
615 inline Vector3DF &operator-= (const Vector3DI &op);
616 inline Vector3DF &operator-= (const Vector3DF &op);
617 inline Vector3DF &operator-= (const Vector4DF &op);
619 inline Vector3DF &operator*= (const int op);
620 inline Vector3DF &operator*= (const double op);
621 inline Vector3DF &operator*= (const Vector2DC &op);
622 inline Vector3DF &operator*= (const Vector2DI &op);
623 inline Vector3DF &operator*= (const Vector2DF &op);
624 inline Vector3DF &operator*= (const Vector3DC &op);
625 inline Vector3DF &operator*= (const Vector3DI &op);
626 inline Vector3DF &operator*= (const Vector3DF &op);
627 inline Vector3DF &operator*= (const Vector4DF &op);
628 Vector3DF &operator*= (const Matrix4F &op);
629 Vector3DF &operator*= (const MatrixF &op); // see vector.cpp
631 inline Vector3DF &operator/= (const int op);
632 inline Vector3DF &operator/= (const double op);
633 inline Vector3DF &operator/= (const Vector2DC &op);
634 inline Vector3DF &operator/= (const Vector2DI &op);
635 inline Vector3DF &operator/= (const Vector2DF &op);
636 inline Vector3DF &operator/= (const Vector3DC &op);
637 inline Vector3DF &operator/= (const Vector3DI &op);
638 inline Vector3DF &operator/= (const Vector3DF &op);
639 inline Vector3DF &operator/= (const Vector4DF &op);
641 inline Vector3DF &Cross (const Vector3DC &v);
642 inline Vector3DF &Cross (const Vector3DI &v);
643 inline Vector3DF &Cross (const Vector3DF &v);
645 inline double Dot(const Vector3DC &v);
646 inline double Dot(const Vector3DI &v);
647 inline double Dot(const Vector3DF &v);
649 inline double Dist (const Vector2DC &v);
650 inline double Dist (const Vector2DI &v);
651 inline double Dist (const Vector2DF &v);
652 inline double Dist (const Vector3DC &v);
653 inline double Dist (const Vector3DI &v);
654 inline double Dist (const Vector3DF &v);
655 inline double Dist (const Vector4DF &v);
657 inline double DistSq (const Vector2DC &v);
658 inline double DistSq (const Vector2DI &v);
659 inline double DistSq (const Vector2DF &v);
660 inline double DistSq (const Vector3DC &v);
661 inline double DistSq (const Vector3DI &v);
662 inline double DistSq (const Vector3DF &v);
663 inline double DistSq (const Vector4DF &v);
665 inline Vector3DF &Normalize (void);
666 inline double Length (void);
672 inline const VTYPE &X() const;
673 inline const VTYPE &Y() const;
674 inline const VTYPE &Z() const;
675 inline const VTYPE W() const;
676 inline VTYPE *Data ();
682 // Vector4DF Declarations
691 // Constructors/Destructors
694 inline Vector4DF (VTYPE xa, VTYPE ya, VTYPE za, VTYPE wa);
695 inline Vector4DF (Vector2DC &op);
696 inline Vector4DF (Vector2DI &op);
697 inline Vector4DF (Vector2DF &op);
698 inline Vector4DF (Vector3DC &op);
699 inline Vector4DF (Vector3DI &op);
700 inline Vector4DF (Vector3DF &op);
701 inline Vector4DF (Vector4DF &op);
704 inline Vector4DF &operator= (int op);
705 inline Vector4DF &operator= (double op);
706 inline Vector4DF &operator= (Vector2DC &op);
707 inline Vector4DF &operator= (Vector2DI &op);
708 inline Vector4DF &operator= (Vector2DF &op);
709 inline Vector4DF &operator= (Vector3DC &op);
710 inline Vector4DF &operator= (Vector3DI &op);
711 inline Vector4DF &operator= (Vector3DF &op);
712 inline Vector4DF &operator= (Vector4DF &op);
714 inline Vector4DF &operator+= (int op);
715 inline Vector4DF &operator+= (double op);
716 inline Vector4DF &operator+= (Vector2DC &op);
717 inline Vector4DF &operator+= (Vector2DI &op);
718 inline Vector4DF &operator+= (Vector2DF &op);
719 inline Vector4DF &operator+= (Vector3DC &op);
720 inline Vector4DF &operator+= (Vector3DI &op);
721 inline Vector4DF &operator+= (Vector3DF &op);
722 inline Vector4DF &operator+= (Vector4DF &op);
724 inline Vector4DF &operator-= (int op);
725 inline Vector4DF &operator-= (double op);
726 inline Vector4DF &operator-= (Vector2DC &op);
727 inline Vector4DF &operator-= (Vector2DI &op);
728 inline Vector4DF &operator-= (Vector2DF &op);
729 inline Vector4DF &operator-= (Vector3DC &op);
730 inline Vector4DF &operator-= (Vector3DI &op);
731 inline Vector4DF &operator-= (Vector3DF &op);
732 inline Vector4DF &operator-= (Vector4DF &op);
734 inline Vector4DF &operator*= (int op);
735 inline Vector4DF &operator*= (double op);
736 inline Vector4DF &operator*= (Vector2DC &op);
737 inline Vector4DF &operator*= (Vector2DI &op);
738 inline Vector4DF &operator*= (Vector2DF &op);
739 inline Vector4DF &operator*= (Vector3DC &op);
740 inline Vector4DF &operator*= (Vector3DI &op);
741 inline Vector4DF &operator*= (Vector3DF &op);
742 inline Vector4DF &operator*= (Vector4DF &op);
743 Vector4DF &operator*= (const Matrix4F &op);
744 Vector4DF &operator*= (const MatrixF &op); // see vector.cpp
746 inline Vector4DF &operator/= (int op);
747 inline Vector4DF &operator/= (double op);
748 inline Vector4DF &operator/= (Vector2DC &op);
749 inline Vector4DF &operator/= (Vector2DI &op);
750 inline Vector4DF &operator/= (Vector2DF &op);
751 inline Vector4DF &operator/= (Vector3DC &op);
752 inline Vector4DF &operator/= (Vector3DI &op);
753 inline Vector4DF &operator/= (Vector3DF &op);
754 inline Vector4DF &operator/= (Vector4DF &op);
756 inline Vector4DF &Cross (Vector4DF &v);
758 inline double Dot(Vector4DF &v);
760 inline double Dist (Vector4DF &v);
762 inline double DistSq (Vector4DF &v);
764 inline Vector4DF &Normalize (void);
765 inline double Length (void);
767 inline VTYPE &X(void);
768 inline VTYPE &Y(void);
769 inline VTYPE &Z(void);
770 inline VTYPE &W(void);
771 inline const VTYPE &X(void) const;
772 inline const VTYPE &Y(void) const;
773 inline const VTYPE &Z(void) const;
774 inline const VTYPE &W(void) const;
775 inline VTYPE *Data (void);
781 // Vector Code Definitions (Inlined)
782 #include "vector.cci"