source: GTP/trunk/App/Demos/Vis/FriendlyCulling/Converter/SimpleVec.cpp @ 3012

Revision 3012, 2.0 KB checked in by mattausch, 16 years ago (diff)
Line 
1#include "SimpleVec.h"
2#include <float.h>
3
4
5
6// Given min a vector to minimize and a candidate vector, replace
7// elements of min whose corresponding elements in Candidate are
8// smaller.  This function is used for finding objects' bounds,
9// among other things.
10void Minimize(SimpleVec &min, const SimpleVec &Candidate)
11{
12        if (Candidate.x < min.x)
13                min.x = Candidate.x;
14        if (Candidate.y < min.y)
15                min.y = Candidate.y;
16        if (Candidate.z < min.z)
17                min.z = Candidate.z;
18}
19
20// Given min a vector to minimize and a candidate vector, replace
21// elements of min whose corresponding elements in Candidate are
22// larger.  This function is used for finding objects' bounds,
23// among other things.
24void Maximize(SimpleVec &max, const SimpleVec &Candidate)
25{
26        if (Candidate.x > max.x)
27                max.x = Candidate.x;
28        if (Candidate.y > max.y)
29                max.y = Candidate.y;
30        if (Candidate.z > max.z)
31                max.z = Candidate.z;
32}
33
34// Project the vector onto the YZ, XZ, or XY plane depending on which.
35// which      Coordinate plane to project onto
36// 0          YZ
37// 1          XZ
38// 2          XY
39// This function is used by the polygon intersection code.
40
41void SimpleVec::ExtractVerts(float *px, float *py, int which) const
42{
43        switch (which) {
44        case 0:
45                *px = y;
46                *py = z;
47                break;
48        case 1:
49                *px = x;
50                *py = z;
51                break;
52        case 2:
53                *px = x;
54                *py = y;
55                break;
56        }
57}
58
59// returns the axis, where the vector has the largest value
60int
61SimpleVec::DrivingAxis(void) const
62{
63        int axis = 0;
64        float val = fabs(x);
65
66        if (fabs(y) > val) {
67                val = fabs(y);
68                axis = 1;
69        }
70
71        if (fabs(z) > val)
72                axis = 2;
73
74        return axis;
75}
76
77
78// returns the axis, where the vector has the smallest value
79int SimpleVec::TinyAxis(void) const
80{
81        int axis = 0;
82        float val = fabs(x);
83
84        if (fabs(y) < val) {
85                val = fabs(y);
86                axis = 1;
87        }
88
89        if (fabs(z) < val)
90                axis = 2;
91
92        return axis;
93}
94
95
96bool SimpleVec::CheckValidity() const
97{
98#ifdef _WIN32
99        return !(_isnan(x) || _isnan(y) || _isnan(z));
100#else
101        return !(isnan(x) || isnan(y) || isnan(z));
102#endif 
103}
Note: See TracBrowser for help on using the repository browser.