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