Institut de Robòtica i Informàtica Industrial
KRD Group

The CuikSuite Project

box.h

Go to the documentation of this file.
00001 #ifndef BOXH
00002 #define BOXH
00003 
00004 #include "interval.h"
00005 #include "boolean.h"
00006 #include "variable_set.h"
00007 #include "vector.h"
00008 
00009 #include <stdio.h>
00010 
00011 
00020 /************************************************************************************/
00025 #define EMPTY_BOX                 0
00026 
00032 #define ERROR_IN_PROCESS          1
00033 
00038 #define REDUCED_BOX               2
00039 
00045 #define UNBOUNDED_BOX             3
00046 
00052 #define REDUCED_BOX_WITH_SOLUTION 4
00053 
00059 #define NOT_REDUCED_BOX           5
00060 
00065 #define BOX_OK                    6
00066 /************************************************************************************/
00067 
00083 typedef struct {
00084   unsigned int level; 
00085   unsigned int n; 
00086   Tinterval *is; 
00087 } Tbox;
00088 
00099 void InitBox(unsigned int dim,Tinterval *is,Tbox *b);
00100 
00115 unsigned int GetBoxBufferSize(Tbox *b); 
00116 
00132 void Box2Buffer(unsigned int c,unsigned int n,double *buffer,Tbox *b);
00133 
00153 void Buffer2Box(unsigned int *c,unsigned int *n,double *buffer,Tbox *b);
00154 
00169 void CopyBox(void *b_out,void *b_in);
00170 
00187 void CopyBoxSubset(boolean *used,void *b_out,void *b_in);
00188 
00200 void SetBoxIntervals(Tinterval *is,Tbox *b);
00201 
00202 
00213 void SetBoxInterval(unsigned int n,Tinterval *is,Tbox *b);
00214 
00215 
00238 boolean BoxesIntersection(boolean *used,Tbox *b1,Tbox *b2,Tbox *bout);
00239 
00261 void BoxUnion(boolean *used,Tbox *b1,Tbox *b2,Tbox *b_out);
00262 
00263 
00280 boolean PointInBox(boolean *used,unsigned int n,double *v,Tbox *b);
00281 
00304 boolean PointInSubBox(boolean *used,Tvector *v,Tbox *b);
00305 
00328 double DistanceToSubBoxCenter(boolean *used,Tvector *v,Tbox *b);
00329 
00347 boolean IsPunctualBox(boolean *used,double epsilon,Tbox *b);
00348 
00364 boolean BoxInclusion(boolean *used,Tbox *b1,Tbox *b2);
00365 
00380 Tinterval *GetBoxInterval(unsigned int n,Tbox *b);
00381 
00396 Tinterval *GetBoxIntervals(Tbox *b);
00397 
00412 double GetBoxSize(boolean *used,Tbox *b);
00413 
00428 double GetBoxMaxSizeVarSet(Tvariable_set *vars,Tbox *b);
00429 
00444 double GetBoxMinSizeVarSet(Tvariable_set *vars,Tbox *b);
00445 
00459 double GetBoxDiagonal(boolean *used,Tbox *b);
00460 
00471 unsigned int GetBoxLevel(Tbox *b);
00472 
00487 double GetBoxCenterDistance(boolean *used,Tbox *b1,Tbox *b2);
00488 
00503 double GetBoxVolume(boolean *used,Tbox *b);
00504 
00514 unsigned int GetBoxNIntervals(Tbox *b);
00515 
00529 unsigned int GetBoxMaxDim(boolean *used,Tbox *b);
00530 
00546 unsigned int GetBoxSplitDim(boolean *used,Tbox *b);
00547 
00570 void SplitBox(unsigned int n,double r,Tbox *b1,Tbox *b2,Tbox *b);
00571 
00581 void ScaleBox(double max_upper,Tbox *b);
00582 
00583 
00602 boolean CmpBoxDepthFirst(void *b1,void *b2,void *userData);
00603 
00622 boolean CmpBoxBreadthFirst(void *b1,void *b2,void *userData);
00623 
00639 void PrintBox(FILE *f,Tbox *b);
00640 
00662 void PrintBoxSubset(FILE *f,boolean *used,char **varNames,Tbox *b);
00663 
00678 int ReadBox(FILE *f,Tbox *b);
00679 
00680 
00690 void SaveBox(FILE *f,Tbox *b);
00691 
00702 void LoadBox(FILE *f,Tbox *b);
00703 
00712 void DeleteBox(void *b);
00713 
00714 #endif