129 lines
1.5 KiB
C++
129 lines
1.5 KiB
C++
#include "MT_Optimize.h"
|
|
|
|
|
|
GEN_INLINE
|
|
MT_Plane3::
|
|
MT_Plane3(
|
|
const MT_Vector3 &a,
|
|
const MT_Vector3 &b,
|
|
const MT_Vector3 &c
|
|
){
|
|
MT_Vector3 l1 = b-a;
|
|
MT_Vector3 l2 = c-b;
|
|
|
|
MT_Vector3 n = l1.cross(l2);
|
|
n = n.safe_normalized();
|
|
MT_Scalar d = n.dot(a);
|
|
|
|
m_co[0] = n.x();
|
|
m_co[1] = n.y();
|
|
m_co[2] = n.z();
|
|
m_co[3] = -d;
|
|
}
|
|
|
|
/**
|
|
* Construction from vector and a point.
|
|
*/
|
|
GEN_INLINE
|
|
MT_Plane3::
|
|
MT_Plane3(
|
|
const MT_Vector3 &n,
|
|
const MT_Vector3 &p
|
|
){
|
|
|
|
MT_Vector3 mn = n.safe_normalized();
|
|
MT_Scalar md = mn.dot(p);
|
|
|
|
m_co[0] = mn.x();
|
|
m_co[1] = mn.y();
|
|
m_co[2] = mn.z();
|
|
m_co[3] = -md;
|
|
}
|
|
|
|
|
|
/**
|
|
* Default constructor
|
|
*/
|
|
GEN_INLINE
|
|
MT_Plane3::
|
|
MT_Plane3(
|
|
):
|
|
MT_Tuple4()
|
|
{
|
|
m_co[0] = MT_Scalar(1);
|
|
m_co[1] = MT_Scalar(0);
|
|
m_co[2] = MT_Scalar(0);
|
|
m_co[3] = MT_Scalar(0);
|
|
}
|
|
|
|
/**
|
|
* Return plane normal
|
|
*/
|
|
|
|
GEN_INLINE
|
|
MT_Vector3
|
|
MT_Plane3::
|
|
Normal(
|
|
) const {
|
|
return MT_Vector3(m_co[0],m_co[1],m_co[2]);
|
|
}
|
|
|
|
/**
|
|
* Return plane scalar i.e the d from n.x + d = 0
|
|
*/
|
|
|
|
GEN_INLINE
|
|
MT_Scalar
|
|
MT_Plane3::
|
|
Scalar(
|
|
) const {
|
|
return m_co[3];
|
|
}
|
|
|
|
GEN_INLINE
|
|
void
|
|
MT_Plane3::
|
|
Invert(
|
|
) {
|
|
m_co[0] = -m_co[0];
|
|
m_co[1] = -m_co[1];
|
|
m_co[2] = -m_co[2];
|
|
m_co[3] = -m_co[3];
|
|
}
|
|
|
|
|
|
/**
|
|
* Assignment operator
|
|
*/
|
|
|
|
GEN_INLINE
|
|
MT_Plane3 &
|
|
MT_Plane3::
|
|
operator = (
|
|
const MT_Plane3 & rhs
|
|
) {
|
|
m_co[0] = rhs.m_co[0];
|
|
m_co[1] = rhs.m_co[1];
|
|
m_co[2] = rhs.m_co[2];
|
|
m_co[3] = rhs.m_co[3];
|
|
return *this;
|
|
}
|
|
|
|
/**
|
|
* Return the distance from a point to the plane
|
|
*/
|
|
|
|
GEN_INLINE
|
|
MT_Scalar
|
|
MT_Plane3::
|
|
signedDistance(
|
|
const MT_Vector3 &v
|
|
) const {
|
|
return Normal().dot(v) + m_co[3];
|
|
}
|
|
|
|
|
|
|
|
|
|
|