#include <GLViewer_Tools.h>
Public Types | |
enum | FieldPoint { FP_Start = 0, FP_End = 1 } |
Searched point. More... | |
enum | IterationStatus { IS_ERROR = 0, IS_LOOP, IS_NOT_SOLVED, IS_SOLVED } |
Status of interation. More... | |
enum | EndStatus { ES_ERROR = 0, ES_LOOP, ES_SOLVED } |
Final status of solving. More... | |
Public Member Functions | |
GLViewer_LineField () | |
GLViewer_LineField (const int theMAXSize, const int xn, const int yn) | |
virtual | ~GLViewer_LineField () |
void | addLine (FieldDim, GLViewer_LineList *) |
Adds new line. More... | |
void | addLine (FieldDim theDim, double theMC, double theBegin, double theEnd) |
Calls previous. More... | |
int | insertLine (FieldDim theDim, GLViewer_LineList *, int thePosition) |
Adds new line and sorted field. More... | |
int | insertLine (FieldDim theDim, double theMC, double theBegin, double theEnd, int thePosition) |
Calls previous. More... | |
GLViewer_LineList * | getLine (int index, FieldDim) |
Returns line by index and dimension. More... | |
void | setBorders (double X1, double X2, double Y1, double Y2) |
Nullifys field and sets same continued segments. More... | |
void | addRectangle (double top, double right, double bottom, double left) |
Cut rectangle in grid. More... | |
int * | intersectIndexes (FieldDim theDim, int theIndex, const GLViewer_LineList *theLL, int &theSize) |
returns arrey of intersects indexes with More... | |
void | print () |
void | show () |
int | getDimSize (FieldDim) |
int | segmentNumber () |
Returns number of segment. More... | |
bool | setPoint (FieldPoint, double x, double y) |
Sets start/end search point. More... | |
void | optimize () |
Optimize field. More... | |
void | initialize () |
Some prepare actions. More... | |
EndStatus | startAlgorithm () |
Main method. More... | |
double * | solution (int &size) |
Returns solution and size of solution. More... | |
Static Public Member Functions | |
static FieldDim | invertDim (FieldDim) |
Returns other dimension. More... | |
Protected Member Functions | |
void | iteration () |
One iteration of algorithm. More... | |
IterationStatus | checkComplete () |
Checks for complete status. More... | |
int * | findByCount (int &theParam) |
Finds LineList by counts and returns indexes. More... | |
int | findBySegment (FieldDim, int coord1, int coord2, bool inCurArray=true) |
Finds LineList by segment and dimension. More... | |
GraphNode * | getCurArray () |
Returns current solution array. More... | |
GraphNode * | getSecArray () |
Returns. More... | |
int | maxSegmentNum () |
Returns maximum segment number. More... | |
GLViewer_LineList ** | getLLArray (FieldDim) |
Returns list of LileList by dimension. More... | |
Private Attributes | |
GLViewer_LineList ** | myXLineArray |
GLViewer_LineList ** | myYLineArray |
int | myXSize |
int | myYSize |
GraphNode * | myGraphArray1 |
GraphNode * | myGraphArray2 |
int | myCurArrayIndex |
SearchPoint | myStartPoint |
SearchPoint | myEndPoint |
int | myCurCount |
Tools for solving algorithm of finding shortest path on rare grid with minimum of line turns number
GLViewer_LineField::GLViewer_LineField | ( | ) |
Constructor
References myCurArrayIndex, myCurCount, myGraphArray1, myGraphArray2, myXLineArray, myXSize, myYLineArray, and myYSize.
Constructor
References myCurArrayIndex, myCurCount, myGraphArray1, myGraphArray2, myXLineArray, myXSize, myYLineArray, and myYSize.
|
virtual |
Destructor
References myGraphArray1, myGraphArray2, myXLineArray, myXSize, myYLineArray, and myYSize.
void GLViewer_LineField::addLine | ( | FieldDim | theDim, |
GLViewer_LineList * | |||
) |
best way, if line is already sorted
Adds line
void GLViewer_LineField::addLine | ( | FieldDim | theDim, |
double | theMC, | ||
double | theBegin, | ||
double | theEnd | ||
) |
Adds line
theDim | - dimension |
theMC | - main co-ordinate |
theBegin | - start co-ordinate |
theEnd | - end co-ordinate |
References addLine(), GLViewer_LineList::addSegment(), and GLViewer_LineList::setMainCoord().
void GLViewer_LineField::addRectangle | ( | double | top, |
double | right, | ||
double | bottom, | ||
double | left | ||
) |
Adds rectangle
top,right | - a corner of rectangle |
bottom,left | - other corner of rectangle |
References GLViewer_LineList::mainCoord(), myXLineArray, myXSize, myYLineArray, myYSize, and GLViewer_LineList::removeSegment().
|
protected |
Checks for complete status
References FD_X, FD_Y, getCurArray(), getSecArray(), IS_ERROR, IS_LOOP, IS_NOT_SOLVED, IS_SOLVED, GraphNode::myCount, myCurArrayIndex, myEndPoint, myGraphArray1, myGraphArray2, GraphNode::mySegmentindex, SearchPoint::mySolveIndex, myXLineArray, SearchPoint::myXLineIndex, SearchPoint::myXSegmentIndex, myYLineArray, SearchPoint::myYLineIndex, SearchPoint::myYSegmentIndex, GraphNode::prevNodeIndex, and segmentNumber().
|
protected |
Finds LineList by counts and returns indexes
References getCurArray(), GraphNode::myCount, myGraphArray1, myGraphArray2, myXLineArray, myYLineArray, and segmentNumber().
|
protected |
Finds LineList by segment and dimension
References getCurArray(), getDimSize(), getSecArray(), GraphNode::myDim, myGraphArray1, myGraphArray2, GraphNode::myLineIndex, GraphNode::mySegmentindex, myXLineArray, myYLineArray, and segmentNumber().
|
protected |
References myCurArrayIndex, myGraphArray1, and myGraphArray2.
int GLViewer_LineField::getDimSize | ( | FieldDim | theDim | ) |
GLViewer_LineList * GLViewer_LineField::getLine | ( | int | theIndex, |
FieldDim | theFD | ||
) |
theIndex | - index in list |
tehFD | - dimension |
References FD_X, FD_Y, myXLineArray, myXSize, myYLineArray, and myYSize.
|
protected |
theDim | - dimension |
References FD_X, FD_Y, myXLineArray, and myYLineArray.
|
protected |
References myCurArrayIndex, myGraphArray1, and myGraphArray2.
void GLViewer_LineField::initialize | ( | ) |
Needs call setPoint before
Some prepare actions Needs call setPoint before
References GLViewer_LineList::count(), FD_X, FD_Y, getDimSize(), getLine(), GraphNode::myCount, myCurArrayIndex, myCurCount, GraphNode::myDim, myGraphArray1, myGraphArray2, GraphNode::myLineIndex, GraphNode::mySegmentindex, myStartPoint, myXLineArray, SearchPoint::myXLineIndex, SearchPoint::myXSegmentIndex, myYLineArray, SearchPoint::myYLineIndex, SearchPoint::myYSegmentIndex, GraphNode::prevNodeIndex, and segmentNumber().
int GLViewer_LineField::insertLine | ( | FieldDim | theDim, |
GLViewer_LineList * | theLL, | ||
int | thePosition | ||
) |
Returns position
Adds line
theDim | - dimension |
theLL | - main co-ordinate |
thePosition | - index in list |
References getDimSize(), getLLArray(), GLViewer_LineList::mainCoord(), myXLineArray, and myYLineArray.
int GLViewer_LineField::insertLine | ( | FieldDim | theDim, |
double | theMainCoord, | ||
double | theBegin, | ||
double | theEnd, | ||
int | thePosition | ||
) |
Adds line
theDim | - dimension |
theMainCoord | - main co-ordinate |
theBegin | - start co-ordinate |
theEnd | - end co-ordinate |
thePosition | - index in list |
References GLViewer_LineList::addSegment(), insertLine(), and GLViewer_LineList::setMainCoord().
int * GLViewer_LineField::intersectIndexes | ( | FieldDim | theDim, |
int | theIndex, | ||
const GLViewer_LineList * | theLL, | ||
int & | theSize | ||
) |
theLL |
theDim | - dimension |
theIndex | - index |
theLL | - line with that intersection is checked |
theSize | - to return value of array size |
References GLViewer_LineList::contains(), getDimSize(), getLine(), GLViewer_LineList::mainCoord(), myXLineArray, and myYLineArray.
|
protected |
One iteration of algorithm
References findByCount(), findBySegment(), getCurArray(), getLine(), intersectIndexes(), invertDim(), GraphNode::myCount, myCurCount, GraphNode::myDim, GraphNode::myLineIndex, GraphNode::mySegmentindex, and GraphNode::prevNodeIndex.
|
protected |
References GLViewer_LineList::count(), getDimSize(), getLine(), myXLineArray, and myYLineArray.
void GLViewer_LineField::optimize | ( | ) |
Removes all multiple segments
References GLViewer_LineList::count(), getDimSize(), getLine(), myEndPoint, myStartPoint, myXLineArray, SearchPoint::myXLineIndex, SearchPoint::myXSegmentIndex, myYLineArray, SearchPoint::myYLineIndex, SearchPoint::myYSegmentIndex, GLViewer_LineList::readSegment(), and GLViewer_LineList::removeSegment().
void GLViewer_LineField::print | ( | ) |
Prints debug info about line field
References myXLineArray, myXSize, myYLineArray, and myYSize.
int GLViewer_LineField::segmentNumber | ( | ) |
References GLViewer_LineList::count(), getDimSize(), getLine(), myXLineArray, and myYLineArray.
void GLViewer_LineField::setBorders | ( | double | X1, |
double | X2, | ||
double | Y1, | ||
double | Y2 | ||
) |
Sets borders of field
X1,X2 | - minimal and maximal abscisses |
Y1,Y2 | - minimal and maximal ordinates |
References GLViewer_LineList::addSegment(), GLViewer_LineList::clear(), myXLineArray, myXSize, myYLineArray, myYSize, and GLViewer_LineList::setMainCoord().
bool GLViewer_LineField::setPoint | ( | FieldPoint | thePoint, |
double | theX, | ||
double | theY | ||
) |
Sets start/end search point
thePoint | - type of point (start: FP_Start; end: FP_End ) |
theX,theY | - point co-ordinates |
References GLViewer_LineList::contains(), FD_X, FD_Y, FP_Start, getLine(), GLViewer_LineList::mainCoord(), myEndPoint, SearchPoint::mySolveIndex, myStartPoint, myXLineArray, SearchPoint::myXLineIndex, SearchPoint::myXSegmentIndex, myXSize, myYLineArray, SearchPoint::myYLineIndex, SearchPoint::myYSegmentIndex, and myYSize.
void GLViewer_LineField::show | ( | ) |
Draws field with help of OpenGL
References FD_X, FD_Y, getLine(), myXSize, myYSize, GLViewer_LineList::show(), and solution().
double * GLViewer_LineField::solution | ( | int & | theSize | ) |
References FD_X, getCurArray(), getLine(), GLViewer_LineList::mainCoord(), myCurCount, myEndPoint, myGraphArray1, myGraphArray2, SearchPoint::mySolveIndex, myXLineArray, myYLineArray, GraphNode::prevNodeIndex, and GLViewer_LineList::readSegment().
GLViewer_LineField::EndStatus GLViewer_LineField::startAlgorithm | ( | ) |
Main method, performs algorithm execution
References checkComplete(), ES_ERROR, ES_LOOP, ES_SOLVED, IS_ERROR, IS_LOOP, IS_SOLVED, iteration(), myCurCount, myGraphArray1, myGraphArray2, myXLineArray, and myYLineArray.
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |