Core 1.0
Public Member Functions | Protected Attributes | List of all members
ArrayIndex2 Class Reference

A two dimensional grid structure with an index set for every cell. More...

#include <arrayindex.h>

Inheritance diagram for ArrayIndex2:
Array2 Box2

Public Member Functions

 ArrayIndex2 ()
 Create a voxel subdivision of space.
 
 ArrayIndex2 (const Box2 &, int, int)
 Create a voxel subdivision of space. More...
 
 ~ArrayIndex2 ()
 Empty.
 
void Insert (int, const Vector2 &)
 Insert a point. More...
 
void Insert (int, const Circle2 &)
 Insert a circle. More...
 
void Insert (int, const Disc2 &)
 Insert a disc. More...
 
void Insert (int, const Box2 &)
 Insert a box. More...
 
QVector< int > At (int) const
 Access to the i-th entry. More...
 
QVector< int > At (const QPoint &) const
 Access to the i-th entry. More...
 
- Public Member Functions inherited from Array2
 Array2 ()
 Empty array, with empty box.
 
 Array2 (const Box2 &, int, int)
 Create the array structure. More...
 
 Array2 (const Box2 &, int)
 Create the array structure. More...
 
Array2 DownSample (int) const
 Downsample the array. More...
 
Array2 UpSample (int) const
 Upsample the array. More...
 
 ~Array2 ()
 Empty.
 
int VertexSize () const
 Return the size of the vertex array.
 
int GetSizeX () const
 Get the vertex size of the array for x axis.
 
int GetSizeY () const
 Get the vertex size of the array for y axis.
 
int VertexBorderSize () const
 Return the size of the vertex array.
 
int CellSize () const
 Return the size of the cell array.
 
int CellSizeX () const
 Get the cell size of the array for x axis.
 
int CellSizeY () const
 Get the cell size of the array for y axis.
 
QSize GetQtSize () const
 Return the Qt size of the vertex array.
 
Box2 Cell (int) const
 Return the geometry of the cell. More...
 
Box2 Cell (int, int) const
 Return the geometry of the cell. More...
 
void HalfCell (int, int, bool, Triangle2 &, Triangle2 &) const
 Return the geometry of the cell. More...
 
Vector2 CellCenter (int, int) const
 Return the center of the cell. More...
 
void Scale (const Vector2 &)
 Scales the array structure. More...
 
void Scale (const double &)
 Scales the array structure. More...
 
Box2 GetBox () const
 Get the box of the array.
 
Box2 UnitCell () const
 Return the geometry of a generic cell. More...
 
Vector2 CellDiagonal () const
 Return the cell diagonal vector.
 
double CellArea () const
 Return the area of a cell. More...
 
Vector2 ArrayVertex (int, int) const
 Compute the coordinates of a point on the grid. More...
 
Vector2 ArrayVertex (const QPoint &) const
 Compute the coordinates of a point on the grid. More...
 
QVector< Vector2ArrayVertexes (const QVector< QPoint > &) const
 Compute the coordinates of a set of points on the grid. More...
 
Vector2 Size () const
 Return the size of the array.
 
QRect AreaInteger () const
 Return the range of integer values for the domain.
 
QImage ImageGrid (const Box2 &, const double &) const
 Create a texture with a regular grid. More...
 
void Draw (QGraphicsScene &, const QPen &=QPen(), const QBrush &=QBrush()) const
 Draw the cells of the grid. More...
 
void Subdivide ()
 Change the resolution. More...
 
bool IsEmpty () const
 Detect if the array is empty, i.e., any dimension equal to zero.
 
QPoint VertexBorder (int) const
 Compute the k-th point on the boundary of the domain. More...
 
int VertexBorderIndex (int, int) const
 Compute the index of a point on the boundary of the domain. More...
 
void VertexInteger (const Vector2 &, int &, int &) const
 Compute the coordinates of a vertex inside a cell. More...
 
QPoint VertexInteger (const Vector2 &) const
 Compute the coordinates of a vertex inside a cell. More...
 
QPoint VertexInteger (const Vector2 &, double &, double &) const
 Compute the point on the grid given an input point. More...
 
QRect VertexIntegerArea (const Box2 &) const
 Compute the integer coordinates of the vertices embedding a box. More...
 
QRect VertexIntegerArea (const Circle2 &) const
 Compute the integer coordinates of the vertices embedding a circle. More...
 
QRect VertexIntegerArea (const QRect &) const
 Compute the integer coordinates span of the vertices embedding a rectangle. More...
 
void CellInteger (const Vector2 &, int &, int &) const
 Compute the coordinates of a vertex inside a cell. More...
 
void CellInteger (const Vector2 &, int &, int &, double &, double &) const
 Compute the point on the grid given an input point. More...
 
QPoint CellInteger (const Vector2 &) const
 Compute the coordinates of a vertex inside a cell. More...
 
QPoint CellInteger (const Vector2 &, double &, double &) const
 Compute the point on the grid given an input point. More...
 
QRect CellIntegerArea (const Box2 &) const
 Compute the integer coordinates of the cells of the array embedding an input box. More...
 
QRect CellIntegerArea (const Circle2 &) const
 Compute the integer coordinates of the cells of the array embedding an input circle. More...
 
void Translate (const Vector2 &)
 Translate the array. More...
 
Vector2 Center () const
 Return the center of the array.
 
constexpr bool InsideVertexIndex (int, int) const
 Check if the indexes are within range. More...
 
constexpr bool OutsideVertexIndex (int, int) const
 Check if the indexes are outside or on the border. More...
 
constexpr bool InsideVertexIndex (const QPoint &) const
 Check if the indexes are within range. More...
 
constexpr bool InsideVertexIndex (int, int, int) const
 Check if the indexes are within k-range. More...
 
bool Inside (const Vector2 &) const
 Check if a point is in the rectangular domain. More...
 
constexpr bool BorderVertexIndex (int, int) const
 Check if the indexes are on the border. More...
 
constexpr bool BorderVertexIndex (const QPoint &) const
 Check if the indexes are on the border. More...
 
constexpr int VertexIndex (int, int) const
 Compute the index of a given cell. More...
 
constexpr int VertexIndex (const QPoint &) const
 Compute the index of a given cell. More...
 
QPoint Next (const QPoint &, int) const
 Compute the point next to another one. More...
 
QImage CreateEmptyImage () const
 Create an image with the same size as the array. More...
 
QString Statistics () const
 Get statistics.
 
void ClampVertexIndex (int &, int &) const
 Clamp vertex indexes to the size of the array. More...
 

Protected Attributes

QVector< QVector< int > > indexes
 Array containing a list of integers.
 
- Protected Attributes inherited from Array2
int ny = 0
 Sizes.
 
Vector2 celldiagonal = Vector2::Null
 Cell diagonal.
 
Vector2 inversecelldiagonal = Vector2::Null
 Inverse cell diagonal.
 
- Protected Attributes inherited from Box2
Vector2 b
 Lower and upper vertices of the box.
 

Additional Inherited Members

- Static Public Member Functions inherited from Array2
static int NeighborCode (int, int)
 Convert a direction to an 8 bit integer code. More...
 
static QPoint codeToDir (int)
 Convert an 8 bit integer code direction into a direction vector. More...
 
- Protected Member Functions inherited from Array2
constexpr void InverseVertexIndex (int, int &, int &) const
 Compute the coordinates of a given cell. More...
 
constexpr QPoint InverseVertexIndex (int) const
 Compute the coordinates of a given cell. More...
 
constexpr int CellIndex (int, int) const
 Compute the index of a given cell. More...
 
constexpr int CellIndex (const QPoint &) const
 Compute the index of a given cell. More...
 
constexpr bool InsideCellIndex (int, int) const
 Check if the indexes are within range. More...
 
constexpr bool InsideCellIndex (const QPoint &) const
 Check if the indexes are within range. More...
 
void InverseCellIndex (int, int &, int &) const
 Compute the coordinates of a given cell. More...
 
- Protected Member Functions inherited from Box2
 Box2 ()
 Empty.
 
 Box2 (const double &)
 Create a square box centered at the origin and of given half side length. More...
 
 Box2 (const double &, const double &)
 Create a box centered at the origin and of given dimensions. More...
 
 Box2 (const Vector2 &)
 Create a box from a single vertex. More...
 
 Box2 (const Vector2 &, const Vector2 &)
 Create a box. More...
 
 Box2 (const Vector2 &, const double &)
 Creates a box. More...
 
 Box2 (const Box &)
 Create a box in the plane given a box. More...
 
 Box2 (const Box2 &, const Box2 &)
 Create a box embedding two boxes. More...
 
 Box2 (const Box2 &, const Matrix2 &)
 Creates an axis aligned bounding box from a box and a transformation matrix. More...
 
 Box2 (const Box2 &, const Frame2 &)
 Creates an axis aligned bounding box from a box and a frame. More...
 
 Box2 (const QVector< Vector2 > &)
 Compute the bounding box of a set of points. More...
 
 Box2 (const QSize &)
 Create a box from a Qt size. More...
 
Vector2operator[] (int)
 Returns either end vertex of the box.
 
Vector2 operator[] (int) const
 Overloaded.
 
Vector2 Size () const
 Compute the size (width and height) of a box.
 
double Width () const
 Compute the width of a box. More...
 
double Height () const
 Compute the height of a box. More...
 
Vector2 Diagonal () const
 Returns the diagonal of the box.
 
double Radius () const
 Returns the radius of the box, i.e. the length of the half diagonal of the box.
 
double Area () const
 Compute the surface area of a box.
 
double Perimeter () const
 Compute the perimeter of the box.
 
Vector2 Center () const
 Returns the center of the box.
 
Vector2 Vertex (int) const
 Returns the k-th vertex of the box. More...
 
Vector2 Vertex (int, int, int, int) const
 Compute the coordinates of a grid aligned point. More...
 
Box2 Sub (int) const
 Computes the sub-box in the n-th quadrant. More...
 
double R (const Vector2 &) const
 Compute the squared distance between the box and a point. More...
 
double Signed (const Vector2 &) const
 Computes the signed distance between the box and a point. More...
 
double R (const Box2 &) const
 Compute the squared Euclidean distance between two boxes. More...
 
void Translate (const Vector2 &)
 Translates a box. More...
 
void Scale (const Vector2 &)
 Scales a box. More...
 
void Scale (const double &)
 Scales a box. More...
 
Box2 Translated (const Vector2 &) const
 Translated box. More...
 
Box2 Scaled (const double &) const
 Scales a box and return the scaled box. More...
 
Box2 Scaled (const Vector2 &) const
 Scales a box and return the scaled box. More...
 
Box2 Scaled (const QSize &) const
 Scales a box according to a Qt size. More...
 
Box2 ScaledTo (const double &) const
 Scale the box so that the largest side should equal the argument value. More...
 
Box2 Rotated (const double &) const
 Compute the box embedding the rotated box. More...
 
Box2 Rotated (const Matrix2 &) const
 Compute the box embedding the rotated box. More...
 
Box2 Centered () const
 Compute the box translated to origin. More...
 
void SetCubic ()
 Creates the tightest embedding cube from an arbitrarilly shaped box. More...
 
void SetInscribedCubic ()
 Creates the biggest cube inscribed in the box. More...
 
Box2 Cube () const
 Return the tightest embedding cube from an arbitrarilly shaped box. More...
 
void Extend (const double &)
 Extend the limits of the box by a given distance. More...
 
void Extend (const Vector2 &)
 Extend the limits of the box given a point. More...
 
Box2 Extended (const double &) const
 Extend the limits of the box by a given distance. More...
 
void SetParallelepipedic (int, int &, int &)
 Inflates a box so that its dimensions should be a fraction of its maximum side length. More...
 
void SetParallelepipedic (const double &, int &, int &)
 Creates a parallelepipedic box whose dimensions are integer multiples of a given input reference size. More...
 
bool Inside (const Vector2 &) const
 Test if a point is inside the box. More...
 
bool Inside (const Vector2 &, const double &) const
 Test if a point lies withing a given range of the box. More...
 
bool Intersect (const Box2 &) const
 Check if the box intersects another box. More...
 
double OverlapArea (const Box2 &) const
 Computes the overlapping area of two boxes. More...
 
Box2 Intersection (const Box2 &) const
 Computes the intersection between two boxes. More...
 
Box ToBox (const double &, const double &) const
 Convert a planar Box2 to a Box. More...
 
int Quadrant (const Vector2 &) const
 Computes quadrant index of a vertex with respect to the box center. More...
 
bool Intersect (const Ray2 &, double &, double &) const
 Computes the intersection between a box and a ray. More...
 
bool Intersect (const Ray2 &) const
 Computes the intersection between a box and a ray. More...
 
bool Intersect (const Line2 &, double &, double &) const
 Computes the intersection between a box and a line. More...
 
bool Intersect (const Segment2 &, double &, double &) const
 Compute the intersection between a box and a segment. More...
 
bool Intersect (const Line2 &) const
 Check the intersection between a box and a line. More...
 
bool Intersect (const Segment2 &) const
 Check the intersection between a box and a segment. More...
 
void Draw (QGraphicsScene &, const QPen &=QPen(), const QBrush &=QBrush()) const
 Draw a rectangle. More...
 
Vector2 RandomInside (Random &=Random::R239) const
 Generate a random vector inside the box. More...
 
Vector2 RandomOn (Random &=Random::R239) const
 Generate a random vector on the perimeter of the box. More...
 
QRectF GetQtRect () const
 Create the Qt rectangle.
 
QRect TileRange (const Box2 &) const
 Compute the range of index for tiling the argument box so that it covers the box. More...
 
Box2 Tile (int, int) const
 Return the tiled the box using integer coordinates. More...
 
Box2 Tile (const QRect &) const
 Return the tiled the box using integer coordinates. More...
 
QVector< Vector2Poisson (const double &, int, Random &=Random::R239) const
 Compute a Poisson disc distribution inside a box. More...
 
- Static Protected Member Functions inherited from Box2
static Box2 MinMax (const Vector2 &, const Vector2 &)
 Create a box from any two points. More...
 
- Static Protected Attributes inherited from Array2
static const QPoint next [8] = { QPoint(1, 0), QPoint(1, 1), QPoint(0, 1), QPoint(-1, 1), QPoint(-1, 0), QPoint(-1, -1), QPoint(0, -1), QPoint(1, -1) }
 Array of points in the 1-ring neighborhood.
 
static const double length [8] = { 1.0, sqrt(2.0), 1.0, sqrt(2.0), 1.0, sqrt(2.0), 1.0, sqrt(2.0) }
 Length to the i-th neighbor.
 
static const double inverselength [8] = { 1.0, 1.0 / sqrt(2.0), 1.0, 1.0 / sqrt(2.0), 1.0, 1.0 / sqrt(2.0), 1.0, 1.0 / sqrt(2.0) }
 Inverse length.
 
- Static Protected Attributes inherited from Box2
static const double epsilon = 1.0e-5
 Epsilon value used to check intersections and some round off errors.
 
static const Box2 Infinity
 Huge bounding box, which should enclose any other.
 
static const Box2 Null
 Null box, equivalent to. More...
 
static const Box2 Unit
 Unit box, defined as. More...
 

Detailed Description

A two dimensional grid structure with an index set for every cell.

Constructor & Destructor Documentation

◆ ArrayIndex2()

ArrayIndex2::ArrayIndex2 ( const Box2 box,
int  nx,
int  ny 
)

Create a voxel subdivision of space.

Parameters
boxThe box, should be cubic.
nSubdivison.

Member Function Documentation

◆ At() [1/2]

QVector< int > ArrayIndex2::At ( const QPoint &  p) const
inline

Access to the i-th entry.

Parameters
pPoint.

◆ At() [2/2]

QVector< int > ArrayIndex2::At ( int  i) const
inline

Access to the i-th entry.

Parameters
iThe index.

◆ Insert() [1/4]

void ArrayIndex2::Insert ( int  id,
const Box2 box 
)

Insert a box.

Parameters
idThe index.
boxThe box.

◆ Insert() [2/4]

void ArrayIndex2::Insert ( int  id,
const Circle2 circle 
)

Insert a circle.

This differs from the disc, as only the cells straddling the circle will be added.

Parameters
idThe index.
cThe circle.

◆ Insert() [3/4]

void ArrayIndex2::Insert ( int  id,
const Disc2 disc 
)

Insert a disc.

Parameters
idThe index.
discThe disc.

◆ Insert() [4/4]

void ArrayIndex2::Insert ( int  id,
const Vector2 p 
)

Insert a point.

Parameters
idThe index.
pPoint.