|
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] |
1.7.5.1