26 #ifndef WFMATH_ROT_BOX_FUNCS_H
27 #define WFMATH_ROT_BOX_FUNCS_H
29 #include <wfmath/rotbox.h>
31 #include <wfmath/vector.h>
32 #include <wfmath/point.h>
33 #include <wfmath/axisbox.h>
34 #include <wfmath/ball.h>
41 inline RotBox<dim>& RotBox<dim>::operator=(
const RotBox<dim>& a)
43 m_corner0 = a.m_corner0;
45 m_orient = a.m_orient;
51 inline bool RotBox<dim>::isEqualTo(
const RotBox<dim>& b,
double epsilon)
const
53 return Equal(m_corner0, b.m_corner0, epsilon)
54 &&
Equal(m_size, b.m_size, epsilon)
55 &&
Equal(m_orient, b.m_orient, epsilon);
59 inline Point<dim> RotBox<dim>::getCorner(
int i)
const
61 assert(i >= 0 && i < (1 << dim));
68 for(
int j = 0; j < dim; ++j)
69 dist[j] = (i & (1 << j)) ? m_size[j] : 0;
71 dist.setValid(m_size.isValid());
73 return m_corner0 +
Prod(dist, m_orient);
77 AxisBox<dim> RotBox<dim>::boundingBox()
const
79 Point<dim> min = m_corner0, max = m_corner0;
99 for(
int i = 0; i < dim; ++i) {
100 for(
int j = 0; j < dim; ++j) {
101 CoordType value = m_orient.elem(j, i) * m_size[j];
109 bool valid = isValid();
114 return AxisBox<dim>(min, max,
true);
121 Point<dim> Point<dim>::toParentCoords(
const RotBox<dim>& coords)
const
123 return coords.corner0() + (*
this - Point().setToOrigin()) * coords.orientation();
127 Point<dim> Point<dim>::toLocalCoords(
const RotBox<dim>& coords)
const
129 return Point().setToOrigin() + coords.orientation() * (*
this - coords.corner0());
134 #endif // WFMATH_ROT_BOX_FUNCS_H