Go to the documentation of this file.00001
00002
00003
00004
00005
00006 #ifndef _GMTL_TRIOPS_H_
00007 #define _GMTL_TRIOPS_H_
00008
00009 #include <gmtl/Tri.h>
00010 #include <gmtl/Generate.h>
00011 #include <gmtl/VecOps.h>
00012
00013 namespace gmtl
00014 {
00027 template< class DATA_TYPE >
00028 Point<DATA_TYPE, 3> center( const Tri<DATA_TYPE>& tri )
00029 {
00030 const float one_third = (1.0f/3.0f);
00031 return (tri[0] + tri[1] + tri[2]) * DATA_TYPE(one_third);
00032 }
00033
00041 template< class DATA_TYPE >
00042 Vec<DATA_TYPE, 3> normal( const Tri<DATA_TYPE>& tri )
00043 {
00044 Vec<DATA_TYPE, 3> normal = makeCross( gmtl::Vec<DATA_TYPE,3>(tri[1] - tri[0]), gmtl::Vec<DATA_TYPE,3>(tri[2] - tri[0]) );
00045 normalize( normal );
00046 return normal;
00047 }
00063 template< class DATA_TYPE >
00064 bool operator==( const Tri<DATA_TYPE>& tri1, const Tri<DATA_TYPE>& tri2 )
00065 {
00066 return ( (tri1[0] == tri2[0]) &&
00067 (tri1[1] == tri2[1]) &&
00068 (tri1[2] == tri2[2]) );
00069 }
00070
00079 template< class DATA_TYPE >
00080 bool operator!=( const Tri<DATA_TYPE>& tri1, const Tri<DATA_TYPE>& tri2 )
00081 {
00082 return (! (tri1 == tri2));
00083 }
00084
00096 template< class DATA_TYPE >
00097 bool isEqual( const Tri<DATA_TYPE>& tri1, const Tri<DATA_TYPE>& tri2,
00098 const DATA_TYPE& eps )
00099 {
00100 gmtlASSERT( eps >= 0 );
00101 return ( isEqual(tri1[0], tri2[0], eps) &&
00102 isEqual(tri1[1], tri2[1], eps) &&
00103 isEqual(tri1[2], tri2[2], eps) );
00104 }
00107 }
00108
00109 #endif
00110