22 #ifndef __ND_PLANE_H__
23 #define __ND_PLANE_H__
25 #include "ndCoreStdafx.h"
29 #ifdef D_NEWTON_USE_DOUBLE
30 #define ndPlane ndBigPlane
39 ndPlane (ndFloat32 x, ndFloat32 y, ndFloat32 z, ndFloat32 w);
42 ndPlane Scale (ndFloat32 s)
const;
43 ndFloat32 Evalue (
const ndFloat32*
const point)
const;
44 ndFloat32 Evalue (
const ndVector &point)
const;
45 } D_GCC_NEWTON_ALIGN_32 ;
54 ndBigPlane (ndFloat64 x, ndFloat64 y, ndFloat64 z, ndFloat64 w);
58 ndFloat64 Evalue (
const ndFloat64*
const point)
const;
62 #ifndef D_NEWTON_USE_DOUBLE
64 inline ndPlane::ndPlane ()
69 inline ndPlane::ndPlane (
const ndVector& point)
74 inline ndPlane::ndPlane (ndFloat32 x, ndFloat32 y, ndFloat32 z, ndFloat32 w)
79 inline ndPlane::ndPlane (
const ndVector &normal, ndFloat32 distance)
86 :
ndVector ((P1 - P0).CrossProduct(P2 - P0))
88 m_w = - DotProduct(P0 & ndVector::m_triplexMask).GetScalar();
91 inline ndPlane ndPlane::Scale (ndFloat32 s)
const
96 inline ndFloat32 ndPlane::Evalue (
const ndFloat32*
const point)
const
99 return DotProduct ((p & m_triplexMask) | m_wOne).GetScalar();
102 inline ndFloat32 ndPlane::Evalue (
const ndVector& point)
const
104 return DotProduct ((point & m_triplexMask) | m_wOne).GetScalar();
109 inline ndBigPlane::ndBigPlane ()
114 inline ndBigPlane::ndBigPlane (
const ndBigVector& point)
119 inline ndBigPlane::ndBigPlane (ndFloat64 x, ndFloat64 y, ndFloat64 z, ndFloat64 w)
124 inline ndBigPlane::ndBigPlane (
const ndBigVector &normal, ndFloat64 distance)
133 m_w = - DotProduct(P0 & ndBigVector::m_triplexMask).GetScalar();
136 inline ndBigPlane ndBigPlane::Scale (ndFloat64 s)
const
138 return ndBigPlane (m_x * s, m_y * s, m_z * s, m_w * s);
141 inline ndFloat64 ndBigPlane::Evalue (
const ndFloat64*
const point)
const
143 return m_x * point[0] + m_y * point[1] + m_z * point[2] + m_w;
147 inline ndFloat64 ndBigPlane::Evalue (
const ndBigVector &point)
const
149 return m_x * point.m_x + m_y * point.m_y + m_z * point.m_z + m_w;