source: GTP/trunk/Lib/Vis/Preprocessing/src/Triangle3.h @ 1420

Revision 1420, 1.4 KB checked in by mattausch, 18 years ago (diff)

corrected raycasting bug for triangles because of ill defined triangles

Line 
1#ifndef __TRIANGLE3_H
2#define __TRIANGLE3_H
3
4#include "Vector3.h"
5
6
7namespace GtpVisibilityPreprocessor {
8
9class AxisAlignedBox3;
10class Ray;
11
12
13struct Triangle3
14{
15        Triangle3() {};
16        Triangle3(const Vector3 &a, const Vector3 &b, const Vector3 &c);
17
18        void Init(const Vector3 &a, const Vector3 &b, const Vector3 &c);
19
20        Vector3 GetNormal() const;
21
22        Vector3 GetCenter() const;
23
24        float GetSpatialAngle(const Vector3 &point) const;
25
26        float GetArea() const;
27
28        /// returns bounding box around this triangle
29        AxisAlignedBox3 GetBoundingBox() const;
30
31        /// Casts ray into this triangle. Returns hit
32        int CastRay(const Ray &ray, float &t, const float nearestT, Vector3 &normal) const;
33
34         friend ostream& operator<< (ostream &s, const Triangle3 &A);
35         friend istream& operator>> (istream &s, Triangle3 &A);
36
37         /** Checks if this triangle is ill-defined.
38         */
39         bool CheckValidity() const;
40
41         //////////////////////////////
42         /// the triangle vertices
43         Vector3 mVertices[3];
44};
45
46
47// Overload << operator for C++-style output
48inline ostream&
49operator<< (ostream &s, const Triangle3 &A)
50{
51  return s << "(" << A.mVertices[0] << ", " << A.mVertices[1] << ", " << A.mVertices[2] << ")";
52}
53
54// Overload >> operator for C++-style input
55inline istream&
56operator>> (istream &s, Triangle3 &A)
57{
58  char a;
59  // read "(x, y, z)"
60  return s >> a >> A.mVertices[0] >> a >> A.mVertices[1] >> a >> A.mVertices[2] >> a;
61}
62
63
64}
65
66#endif
67
Note: See TracBrowser for help on using the repository browser.