8 using namespace numeric;
10 void Structure::singleCell(
int i,
int j)
21 aux.
arr[ori] = freeSpaceArrangement(aux, ori);
33 createSingleCellSegments(aux,
VERTICAL, j);
38 aux.
P[ori][dir] = reachableInterval(aux.
seg[ori][dir]);
42 linkSingleCellSegments(aux, ori);
47 copySegments(boundary(ori,dir), aux.
seg[ori][dir]);
51 Q_ASSERT(!after_single_cell || (after_single_cell(
this, &r,
61 return freeSpaceArrangement(LF,RF);
424 void Structure::linkSingleCellSegments(
446 if (left[2]) *left[2] = TP;
450 if (right[2]) *right[2] = BP;
469 LP = {left[1],left[2]};
473 Q_ASSERT(! LP.contains(left[3]));
528 Q_ASSERT(! LP.contains(left[3]));
557 RP = {right[2],right[3]};
575 Q_ASSERT(! LP.contains(left[3]));
599 clipSeeThroughPointer(left[2]);
600 clipSeeThroughPointer(right[2]);
603 void Structure::clipSeeThroughPointer(
Pointer p)
618 for(
int i=0; i < 5; ++i)
636 for(
int i=0; i < 5; ++i)
int arr[2]
F arrangements.
data::Interval F[2][2]
Free-Space edges.
void insert_last(BLinkedListElement *el)
insert a new element at the end of the list; the list takes ownership of the element....
reachable: other intervals are reachable
see-through: other interals are visible with a straight line
global definitions for all algorithms.
Pointer seg[2][2][5]
reachability rectangle segments
const Orientation ori
horizontal or vertical
non-accesible. no interval is reachable from this one
Direction
direction of a Pointer inside the reachability structure.
boundary interval in the reachability structure. Represents an interval on the boundary of the FreeSp...
describes l,h pointers. Both pointers are assumed to point into the same rectangle section (right-top...
Interval & clear()
make this an invalid interval
aux. data structure that is used to construct an initial reachability cell
Type type
reachability label
a very simple Rectangle structure, with integer boundaries.
PointerInterval normalized() const
assumes identical orientation !!
Orientation
Segment Orientation.
double min(double a, double b)
minimum function with checks for NAN
second segment = right and top edge
const Direction dir
left/right or bottom/top
Pointer l
points to the lowest segment of the interval
bool contains(Pointer p) const
containment test
Orientation opposite(Orientation ori)
Pointer h
points to the highest segment of the interval
first segment = bottom and left edge
an interval of two double values.
PointerInterval P[2][2]
min/max for each rectangle edge
double max(double a, double b)
maximum function with checks for NAN