diff options
Diffstat (limited to 'src/Quaternions.cpp')
-rw-r--r-- | src/Quaternions.cpp | 61 |
1 files changed, 18 insertions, 43 deletions
diff --git a/src/Quaternions.cpp b/src/Quaternions.cpp index 2de000b..2c01da9 100644 --- a/src/Quaternions.cpp +++ b/src/Quaternions.cpp @@ -2,41 +2,16 @@ #include "Quaternions.h" -extern float u0, u1, u2; -extern float v0, v1, v2; -extern float a, b; -extern int i, j; -extern bool bInter; -extern float pointv[3]; -extern float p1v[3]; -extern float p2v[3]; -extern float p3v[3]; -extern float normalv[3]; - bool PointInTriangle(XYZ *p, XYZ normal, XYZ *p1, XYZ *p2, XYZ *p3) { - bInter=0; - - pointv[0]=p->x; - pointv[1]=p->y; - pointv[2]=p->z; - - p1v[0]=p1->x; - p1v[1]=p1->y; - p1v[2]=p1->z; - - p2v[0]=p2->x; - p2v[1]=p2->y; - p2v[2]=p2->z; - - p3v[0]=p3->x; - p3v[1]=p3->y; - p3v[2]=p3->z; - - normalv[0]=normal.x; - normalv[1]=normal.y; - normalv[2]=normal.z; - + bool bInter = false; + float pointv[3] { p->x, p->y, p->z }; + float p1v[3] { p1->x, p1->y, p1->z }; + float p2v[3] { p2->x, p2->y, p2->z }; + float p3v[3] { p3->x, p3->y, p3->z }; + float normalv[3] { normal.x, normal.y, normal.z }; + + int i = 0, j = 0; #define ABS(X) (((X)<0.f)?-(X):(X) ) #define MAX(A, B) (((A)<(B))?(B):(A)) float max = MAX(MAX(ABS(normalv[0]), ABS(normalv[1])), ABS(normalv[2])); @@ -46,29 +21,29 @@ bool PointInTriangle(XYZ *p, XYZ normal, XYZ *p1, XYZ *p2, XYZ *p3) if (max == ABS(normalv[2])) {i = 0; j = 1;} // x, y #undef ABS - u0 = pointv[i] - p1v[i]; - v0 = pointv[j] - p1v[j]; - u1 = p2v[i] - p1v[i]; - v1 = p2v[j] - p1v[j]; - u2 = p3v[i] - p1v[i]; - v2 = p3v[j] - p1v[j]; + float u0 = pointv[i] - p1v[i]; + float v0 = pointv[j] - p1v[j]; + float u1 = p2v[i] - p1v[i]; + float v1 = p2v[j] - p1v[j]; + float u2 = p3v[i] - p1v[i]; + float v2 = p3v[j] - p1v[j]; if (u1 > -1.0e-05f && u1 < 1.0e-05f)// == 0.0f) { - b = u0 / u2; + float b = u0 / u2; if (0.0f <= b && b <= 1.0f) { - a = (v0 - b * v2) / v1; + float a = (v0 - b * v2) / v1; if ((a >= 0.0f) && (( a + b ) <= 1.0f)) bInter = 1; } } else { - b = (v0 * u1 - u0 * v1) / (v2 * u1 - u2 * v1); + float b = (v0 * u1 - u0 * v1) / (v2 * u1 - u2 * v1); if (0.0f <= b && b <= 1.0f) { - a = (u0 - b * u2) / u1; + float a = (u0 - b * u2) / u1; if ((a >= 0.0f) && (( a + b ) <= 1.0f )) bInter = 1; } |