22#include "ns3/assert.h" 
   23#include "ns3/fatal-error.h" 
   24#include "ns3/vector.h" 
   33Box::Box(
double _xMin, 
double _xMax, 
double _yMin, 
double _yMax, 
double _zMin, 
double _zMax)
 
   56    return position.x <= this->
xMax && position.x >= this->
xMin && position.y <= this->
yMax &&
 
   57           position.y >= this->
yMin && position.z <= this->
zMax && position.z >= this->
zMin;
 
   63    double xMinDist = std::abs(position.x - this->xMin);
 
   64    double xMaxDist = std::abs(this->
xMax - position.x);
 
   65    double yMinDist = std::abs(position.y - this->yMin);
 
   66    double yMaxDist = std::abs(this->
yMax - position.y);
 
   67    double zMinDist = std::abs(position.z - this->zMin);
 
   68    double zMaxDist = std::abs(this->
zMax - position.z);
 
   69    double minX = 
std::min(xMinDist, xMaxDist);
 
   70    double minY = 
std::min(yMinDist, yMaxDist);
 
   71    double minZ = 
std::min(zMinDist, zMaxDist);
 
   72    if (minX < minY && minX < minZ)
 
   74        if (xMinDist < xMaxDist)
 
   85        if (yMinDist < yMaxDist)
 
   96        if (zMinDist < zMaxDist)
 
  111    double xMaxY = current.y + (this->
xMax - current.x) / speed.x * speed.y;
 
  112    double xMinY = current.y + (this->xMin - current.x) / speed.x * speed.y;
 
  113    double yMaxX = current.x + (this->
yMax - current.y) / speed.y * speed.x;
 
  114    double yMinX = current.x + (this->yMin - current.y) / speed.y * speed.x;
 
  115    bool xMaxYOk = (xMaxY <= this->
yMax && xMaxY >= this->
yMin);
 
  116    bool xMinYOk = (xMinY <= this->
yMax && xMinY >= this->
yMin);
 
  117    bool yMaxXOk = (yMaxX <= this->
xMax && yMaxX >= this->
xMin);
 
  118    bool yMinXOk = (yMinX <= this->
xMax && yMinX >= this->
xMin);
 
  119    if (xMaxYOk && speed.x >= 0)
 
  121        return Vector(this->
xMax, xMaxY, 0.0);
 
  123    else if (xMinYOk && speed.x <= 0)
 
  125        return Vector(this->
xMin, xMinY, 0.0);
 
  127    else if (yMaxXOk && speed.y >= 0)
 
  129        return Vector(yMaxX, this->
yMax, 0.0);
 
  131    else if (yMinXOk && speed.y <= 0)
 
  133        return Vector(yMinX, this->
yMin, 0.0);
 
  139        return Vector(0.0, 0.0, 0.0);
 
  153    Vector boxSize(0.5 * (this->
xMax - this->
xMin),
 
  156    Vector boxCenter(this->
xMin + boxSize.x, this->yMin + boxSize.y, this->zMin + boxSize.z);
 
  159    Vector lB1(l1.x - boxCenter.x, l1.y - boxCenter.y, l1.z - boxCenter.z);
 
  160    Vector lB2(l2.x - boxCenter.x, l2.y - boxCenter.y, l2.z - boxCenter.z);
 
  163    Vector lMid(0.5 * (lB1.x + lB2.x), 0.5 * (lB1.y + lB2.y), 0.5 * (lB1.z + lB2.z));
 
  164    Vector l(lB1.x - lMid.x, lB1.y - lMid.y, lB1.z - lMid.z);
 
  165    Vector lExt(std::abs(l.x), std::abs(l.y), std::abs(l.z));
 
  172    if (std::abs(lMid.x) > boxSize.x + lExt.x)
 
  176    if (std::abs(lMid.y) > boxSize.y + lExt.y)
 
  180    if (std::abs(lMid.z) > boxSize.z + lExt.z)
 
  185    if (std::abs(lMid.y * l.z - lMid.z * l.y) > (boxSize.y * lExt.z + boxSize.z * lExt.y))
 
  189    if (std::abs(lMid.x * l.z - lMid.z * l.x) > (boxSize.x * lExt.z + boxSize.z * lExt.x))
 
  193    if (std::abs(lMid.x * l.y - lMid.y * l.x) > (boxSize.x * lExt.y + boxSize.y * lExt.x))
 
  236    if (c1 != 
'|' || c2 != 
'|' || c3 != 
'|' || c4 != 
'|' || c5 != 
'|')
 
  238        is.setstate(std::ios_base::failbit);
 
double yMax
The y coordinate of the top bound of the box.
 
bool IsInside(const Vector &position) const
 
double xMin
The x coordinate of the left bound of the box.
 
Side
Enum class to specify sides of a box.
 
double yMin
The y coordinate of the bottom bound of the box.
 
double xMax
The x coordinate of the right bound of the box.
 
Vector CalculateIntersection(const Vector ¤t, const Vector &speed) const
 
double zMin
The z coordinate of the down bound of the box.
 
bool IsIntersect(const Vector &l1, const Vector &l2) const
Checks if a line-segment between position l1 and position l2 intersects a box.
 
Side GetClosestSide(const Vector &position) const
 
Box()
Create a zero-sized box located at coordinates (0.0,0.0,0.0)
 
double zMax
The z coordinate of the up bound of the box.
 
#define NS_ASSERT(condition)
At runtime, in debugging builds, if this condition is not true, the program prints the source file,...
 
Every class exported by the ns3 library is enclosed in the ns3 namespace.
 
std::ostream & operator<<(std::ostream &os, const Angles &a)
 
ATTRIBUTE_HELPER_CPP(Length)
 
std::istream & operator>>(std::istream &is, Angles &a)