41 initialize(pLow, pHigh, dimension);
48 "Region::Region: arguments have different number of dimensions." 59 void Region::initialize(
const double* pLow,
const double* pHigh, uint32_t dimension)
67 if ((pLow[cDim] > pHigh[cDim]))
70 if (!(pLow[cDim] == std::numeric_limits<double>::max() ||
71 pHigh[cDim] == -std::numeric_limits<double>::max() ))
73 "Region::initialize: Low point has larger coordinates than High point." 74 " Neither point is infinity." 91 memcpy(
m_pLow, pLow, m_dimension *
sizeof(
double));
92 memcpy(
m_pHigh, pHigh, m_dimension *
sizeof(
double));
117 "Region::operator==: Regions have different number of dimensions." 123 m_pLow[i] < r.
m_pLow[i] - std::numeric_limits<double>::epsilon() ||
124 m_pLow[i] > r.
m_pLow[i] + std::numeric_limits<double>::epsilon() ||
125 m_pHigh[i] < r.
m_pHigh[i] - std::numeric_limits<double>::epsilon() ||
126 m_pHigh[i] > r.
m_pHigh[i] + std::numeric_limits<double>::epsilon())
145 return (
sizeof(uint32_t) + 2 *
m_dimension *
sizeof(
double));
151 memcpy(&dimension, ptr,
sizeof(uint32_t));
152 ptr +=
sizeof(uint32_t);
164 *data =
new uint8_t[len];
165 uint8_t* ptr = *data;
168 ptr +=
sizeof(uint32_t);
186 const Point* ppt =
dynamic_cast<const Point*
>(&s);
190 "Region::intersectsShape: Not implemented yet!" 199 const Point* ppt =
dynamic_cast<const Point*
>(&s);
203 "Region::containsShape: Not implemented yet!" 212 const Point* ppt =
dynamic_cast<const Point*
>(&s);
216 "Region::touchesShape: Not implemented yet!" 256 const Point* ppt =
dynamic_cast<const Point*
>(&s);
260 "Region::getMinimumDistance: Not implemented yet!" 268 "Region::intersectsRegion: Regions have different number of dimensions." 282 "Region::containsRegion: Regions have different number of dimensions." 296 "Region::touchesRegion: Regions have different number of dimensions." 302 (
m_pLow[i] >= r.
m_pLow[i] - std::numeric_limits<double>::epsilon() &&
303 m_pLow[i] <= r.
m_pLow[i] + std::numeric_limits<double>::epsilon()) ||
304 (
m_pHigh[i] >= r.
m_pHigh[i] - std::numeric_limits<double>::epsilon() &&
305 m_pHigh[i] <= r.
m_pHigh[i] + std::numeric_limits<double>::epsilon()))
316 "Region::getMinimumDistance: Regions have different number of dimensions." 337 return std::sqrt(ret);
344 "Region::intersectsLineSegment: only supported for 2 dimensions" 349 "Region::intersectsRegion: Region and LineSegment have different number of dimensions." 357 double c_lr[2] = {m_pHigh[0],
m_pLow[1]};
378 "Region::containsPoint: Point has different number of dimensions." 392 "Region::touchesPoint: Point has different number of dimensions." 411 "Region::getMinimumDistance: Point has different number of dimensions." 428 return std::sqrt(ret);
435 "Region::getIntersectingRegion: Regions have different number of dimensions." 443 for (uint32_t cDim = 0; cDim <
m_dimension; ++cDim)
448 for (uint32_t cDim = 0; cDim <
m_dimension; ++cDim)
461 "Region::getIntersectingArea: Regions have different number of dimensions." 467 for (uint32_t cDim = 0; cDim <
m_dimension; ++cDim)
485 double mul = std::pow(2.0, static_cast<double>(
m_dimension) - 1.0);
500 "Region::combineRegion: Region has different number of dimensions." 503 for (uint32_t cDim = 0; cDim <
m_dimension; ++cDim)
514 "Region::combinePoint: Point has different number of dimensions." 517 for (uint32_t cDim = 0; cDim <
m_dimension; ++cDim)
528 "Region::getCombinedRegion: Regions have different number of dimensions." 554 for (uint32_t cIndex = 0; cIndex <
m_dimension; ++cIndex)
556 m_pLow[cIndex] = std::numeric_limits<double>::max();
557 m_pHigh[cIndex] = -std::numeric_limits<double>::max();
Region * clone() override
virtual bool containsPoint(const Point &in) const
virtual double getLow(uint32_t index) const
virtual bool containsRegion(const Region &in) const
virtual void makeDimension(uint32_t dimension)
virtual Region & operator=(const Region &r)
virtual void makeDimension(uint32_t dimension)
virtual bool touchesRegion(const Region &in) const
virtual double getIntersectingArea(const Region &in) const
virtual void getCombinedRegion(Region &out, const Region &in) const
bool touchesShape(const IShape &in) const override
bool containsShape(const IShape &in) const override
virtual bool intersectsRegion(const Region &in) const
virtual void combineRegion(const Region &in)
virtual bool touchesPoint(const Point &in) const
bool intersectsShape(const IShape &in) const override
double getArea() const override
virtual double getHigh(uint32_t index) const
void storeToByteArray(uint8_t **data, uint32_t &length) override
SIDX_DLL std::ostream & operator<<(std::ostream &os, const Ball &ball)
virtual void makeInfinite(uint32_t dimension)
uint32_t getDimension() const override
bool intersectsShape(const IShape &in) const override
void getMBR(Region &out) const override
virtual bool operator==(const Region &) const
uint32_t getByteArraySize() override
double getMinimumDistance(const IShape &in) const override
virtual double getMargin() const
virtual Region getIntersectingRegion(const Region &r) const
virtual double getCoordinate(uint32_t index) const
virtual void combinePoint(const Point &in)
void loadFromByteArray(const uint8_t *data) override
void getCenter(Point &out) const override
virtual bool intersectsLineSegment(const LineSegment &in) const