inlib
1.2.0
|
Public Member Functions | |
plane () | |
plane (const vec< T > &a_p0, const vec< T > &a_p1, const vec< T > &a_p2) | |
plane (const vec< T > &a_normal, const T &a_distance) | |
plane (const vec< T > &a_normal, const vec< T > &a_point) | |
virtual | ~plane () |
plane (const plane &a_from) | |
plane & | operator= (const plane &a_from) |
void | offset (const T &a_distance) |
bool | intersect (const line< T > &a_line, vec< T > &a_intersection) const |
bool | is_in_half_space (const vec< T > &a_point) const |
const vec< T > & | normal () const |
T | distance_from_origin () const |
T | distance (const vec< T > &a_point) const |
inlib::a3::plane< T >::plane | ( | ) | [inline] |
inlib::a3::plane< T >::plane | ( | const vec< T > & | a_p0, |
const vec< T > & | a_p1, | ||
const vec< T > & | a_p2 | ||
) | [inline] |
Definition at line 333 of file a3.
{ // Construct a plane given 3 points. // Orientation is computed by taking (p1 - p0) x (p2 - p0) and // pointing the normal in that direction. vec<T> P = a_p1; P.subtract(a_p0); vec<T> P2 = a_p2; P2.subtract(a_p0); m_normal = P.cross(P2); m_normal.normalize(); m_distance = m_normal.v0() * a_p0.v0() + m_normal.value1() * a_p0.value1() + m_normal.value2() * a_p0.value2(); }
inlib::a3::plane< T >::plane | ( | const vec< T > & | a_normal, |
const T & | a_distance | ||
) | [inline] |
inlib::a3::plane< T >::plane | ( | const vec< T > & | a_normal, |
const vec< T > & | a_point | ||
) | [inline] |
virtual inlib::a3::plane< T >::~plane | ( | ) | [inline, virtual] |
inlib::a3::plane< T >::plane | ( | const plane< T > & | a_from | ) | [inline] |
T inlib::a3::plane< T >::distance | ( | const vec< T > & | a_point | ) | const [inline] |
T inlib::a3::plane< T >::distance_from_origin | ( | ) | const [inline] |
bool inlib::a3::plane< T >::intersect | ( | const line< T > & | a_line, |
vec< T > & | a_intersection | ||
) | const [inline] |
Definition at line 387 of file a3.
{ // Intersect line and plane, returning true if there is an intersection // false if line is parallel to plane const vec<T>& pos = a_line.position(); const vec<T>& dir = a_line.direction(); T d = m_normal.dot(dir); if(d==array<T>::zero()) return false; T t = (m_distance - m_normal.dot(pos))/d; a_intersection = dir; a_intersection.multiply(t); a_intersection.add(pos); //a_intersection = pos + t * dir; return true; }
bool inlib::a3::plane< T >::is_in_half_space | ( | const vec< T > & | a_point | ) | const [inline] |
const vec<T>& inlib::a3::plane< T >::normal | ( | ) | const [inline] |
void inlib::a3::plane< T >::offset | ( | const T & | a_distance | ) | [inline] |
plane& inlib::a3::plane< T >::operator= | ( | const plane< T > & | a_from | ) | [inline] |