28 #define TRIANGLE_TEMP template <class num> inline
29 #define TRIANGLE_FUNC Triangle3d<num>
66 inline const num& Offset()
const{
return offset;}
67 inline void ToString(
char* str)
const;
90 TRIANGLE_FUNC::Triangle3d()
110 void TRIANGLE_FUNC::ToString(
char* str)
const
112 sprintf(str,
"%.3f,%.3f,%.3f %.3f,%.3f,%.3f %.3f,%.3f,%.3f",V3COMP(p0),V3COMP(p1),V3COMP(p2));
123 void TRIANGLE_FUNC::calcValues()
125 centroid = (p0+p1+p2)/3.0;
126 normal = (p2-p1).cross(p0-p1).norm();
127 offset = -centroid.dot(normal);
134 return ( p.dot(normal) + offset );
140 printf(
"Unimplemented function %s\n",__PRETTY_FUNCTION__);
147 printf(
"Unimplemented function %s\n",__PRETTY_FUNCTION__);
154 return ( p - normal*(normal.dot(p)+offset) );
157 #define TRIANGLE_UNARY_OPERATOR_SCALAR(op) \
159 Triangle3d<num>& TRIANGLE_FUNC::operator op (num f) \
168 TRIANGLE_UNARY_OPERATOR_SCALAR(*=)
169 TRIANGLE_UNARY_OPERATOR_SCALAR(/=)
171 #define TRIANGLE_BINARY_OPERATOR_SCALAR(op) \
173 Triangle3d<num> TRIANGLE_FUNC::operator op (num f) const\
175 GVector::vector3d<num> p0_ = p0 op f; \
176 GVector::vector3d<num> p1_ = p1 op f; \
177 GVector::vector3d<num> p2_ = p2 op f; \
178 return(Triangle3d<num>(p0_,p1_,p2_)); \
181 TRIANGLE_BINARY_OPERATOR_SCALAR(*)
182 TRIANGLE_BINARY_OPERATOR_SCALAR(/)
184 #define TRIANGLE_BINARY_OPERATOR_VECTOR(op) \
186 Triangle3d<num> TRIANGLE_FUNC::operator op (GVector::vector3d<num> v) const\
188 GVector::vector3d<num> p0_ = p0 op v; \
189 GVector::vector3d<num> p1_ = p1 op v; \
190 GVector::vector3d<num> p2_ = p2 op v; \
191 return(Triangle3d<num>(p0_,p1_,p2_)); \
194 TRIANGLE_BINARY_OPERATOR_VECTOR(+)
195 TRIANGLE_BINARY_OPERATOR_VECTOR(-)
197 #define TRIANGLE_UNARY_OPERATOR_VECTOR(op) \
199 Triangle3d<num>& TRIANGLE_FUNC::operator op (GVector::vector3d<num> v) \
208 TRIANGLE_UNARY_OPERATOR_VECTOR(+=)
209 TRIANGLE_UNARY_OPERATOR_VECTOR(-=)
Triangle3d< num > operator/(num f) const
returns this triangle scaled by 1/f
Triangle3d< num > & operator*=(num f)
scales this triangle by f
Triangle3d< num > & operator/=(num f)
scales this triangle by 1/f
Triangle3d< num > operator+(GVector::vector3d< num > v) const
returns this triangle translated by vector v
Triangle3d< num > & operator+=(GVector::vector3d< num > v)
translates this triangle by vector v
num closestDist(GVector::vector3d< num > p)
Closest distance from this triangle plane to p.
bool intersects(Triangle3d< num > t)
Return true if the triangle t intersect this triangle.
GVector::vector3d< num > closestPoint(GVector::vector3d< num > p)
Closest point on this triangle plane to p.
bool liesAlongside(GVector::vector3d< num > p)
Returns true if p lies alongside this triangle.
Triangle3d< num > operator*(num f) const
returns this triangle scaled by f
void calcValues()
Calculate derived values (normal, centroid)