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

The CuikSuite Project

equation.h

Go to the documentation of this file.
00001 #ifndef EQUATIONH
00002 #define EQUATIONH 
00003 
00004 #include "boolean.h"
00005 #include "interval.h"
00006 #include "variables.h"
00007 #include "variable_set.h"
00008 #include "monomial.h"
00009 #include "linear_constraint.h"
00010 #include "csmapping.h"
00011 
00012 #include <stdlib.h>
00013 
00014 
00031 #define MAX_TERMS_SIMP 1
00032 
00033 /************************************************************************************/
00040 #define INIT_NUM_MONOMIALS 100
00041 /************************************************************************************/
00042 
00043 /************************************************************************************/
00051 #define LINEAR_EQUATION   0
00052 
00060 #define CIRCLE_EQUATION   1
00061 
00069 #define SADDLE_EQUATION   2
00070 
00078 #define PARABOLA_EQUATION 3
00079 
00087 #define SPHERE_EQUATION   4
00088 /************************************************************************************/
00089 /************************************************************************************/
00097 #define BILINEAR_EQUATION 5
00098 
00106 #define GENERAL_EQUATION  6
00107 
00115 #define UNKNOWN_EQ_TYPE   7
00116 /************************************************************************************/
00117 /************************************************************************************/
00125 #define SYSTEM_EQ   0
00126 
00134 #define COORD_EQ    1
00135 
00143 #define DUMMY_EQ    2
00144 
00153 #define DERIVED_EQ  3
00154 
00161 #define NOTYPE_EQ   4
00162 /************************************************************************************/
00163 /************************************************************************************/
00168 #define GEQ    0
00169 
00174 #define LEQ    1
00175 
00180 #define EQU    2
00181 
00186 #define NOCMP  3
00187 
00188 /************************************************************************************/
00189 
00215 typedef struct {
00216   unsigned int type; 
00218   unsigned int cmp; 
00219   unsigned int order; 
00220   double value; 
00222   unsigned int maxMonomials;
00223   unsigned int nMonomials;
00224   Tmonomial **monomials;
00226   Tvariable_set vars;
00227 } Tequation;
00228 
00236 void InitEquation(Tequation *eq);
00237 
00247 void ResetEquation(Tequation *eq);
00248 
00249 
00261 void EquationFromLinearConstraint(TLinearConstraint *lc,Tequation *eq);
00262 
00274 void EquationFromLinearConstraintProduct(TLinearConstraint *lc1,TLinearConstraint *lc2,Tequation *eq);
00275 
00284 void CopyEquation(Tequation *eq_dst,Tequation *eq_orig);
00285 
00302 void RewriteEquation(double epsilon,Tmapping *map,Tequation *eqOut,Tequation *eq);
00303 
00313 void AccumulateEquations(Tequation *eqn,double ct,Tequation *eq);
00314 
00327 unsigned int FixVariableInEquation(double epsilon,unsigned int nv,double b,Tequation *eq);
00328 
00343 unsigned int ReplaceVariableInEquation(double epsilon,unsigned int nv,
00344                                        TLinearConstraint *lc,Tequation *eq);
00345 
00357 void CtScaleEquation(double ct,Tequation *eq);
00358 
00359 
00370 void VarScaleEquation(unsigned int v,Tequation *eq);
00371 
00384 void NormalizeEquation(Tequation *eq);
00385 
00419 boolean IsSimplificable(unsigned int simpLevel,unsigned int nTerms,boolean *systemVars,
00420                         unsigned int *v,TLinearConstraint *lc,
00421                         Tequation *eq);
00422 
00431 void SetEquationCmp(unsigned int cmp,Tequation *eq);
00432 
00441 void SetEquationType(unsigned int type,Tequation *eq);
00442 
00443 
00452 void SetEquationValue(double v,Tequation *eq);
00453 
00463 boolean LinearEquation(Tequation *eq);
00464 
00474 boolean BilinearEquation(Tequation *eq);
00475 
00485 boolean CircleEquation(Tequation *eq);
00486 
00496 boolean SphereEquation(Tequation *eq);
00497 
00508 boolean SaddleEquation(Tequation *eq);
00509 
00510 
00521 boolean ParabolaEquation(Tequation *eq);
00522 
00532 unsigned int GetEquationCmp(Tequation *eq);
00533 
00543 unsigned int GetEquationType(Tequation *eq);
00544 
00554 double GetEquationValue(Tequation *eq);
00555 
00565 unsigned int GetEquationOrder(Tequation *eq);
00566 
00578 Tvariable_set *GetEquationVariables(Tequation *eq);
00579 
00589 unsigned int GetEquationNumVariables(Tequation *eq);
00590 
00608 unsigned int CmpEquations(Tequation *eq1,Tequation *eq2);
00609 
00622 void AddMonomial(Tmonomial*f,Tequation *eq);
00623 
00633 void GenerateParabolaEquation(unsigned int vx,unsigned int vy,Tequation *eq);
00634 
00645 void GenerateScaledParabolaEquation(double s,unsigned int vx,unsigned int vy,Tequation *eq); 
00646 
00659 void GenerateSaddleEquation(unsigned int vx,unsigned int vy,unsigned int vz,
00660                             Tequation *eq);
00661 
00662 
00676 void GenerateScaledSaddleEquation(double s,
00677                                   unsigned int vx,unsigned int vy,unsigned int vz,
00678                                   Tequation *eq);
00679 
00693 void GenerateGeneralNormEquation(unsigned int nv,unsigned int *v,double n,Tequation *eq);
00706 void GenerateNormEquation(unsigned int vx,unsigned int vy,unsigned int vz,
00707                           double n,
00708                           Tequation *eq);
00739 void GenerateCrossProductEquations(unsigned int v1x,unsigned int v1y,unsigned int v1z,
00740                                    unsigned int v2x,unsigned int v2y,unsigned int v2z,
00741                                    unsigned int v3x,unsigned int v3y,unsigned int v3z,
00742                                    unsigned int vs,
00743                                    double s,
00744                                    Tequation *eq);
00745 
00772 void GenerateDotProductEquation(unsigned int v1x,unsigned int v1y,unsigned int v1z,
00773                                 unsigned int v2x,unsigned int v2y,unsigned int v2z,
00774                                 unsigned int vc,
00775                                 double c,
00776                                 Tequation *eq);
00777 
00791 unsigned int FindMonomial(Tmonomial *f,Tequation *eq);
00792 
00804 Tmonomial *GetMonomial(unsigned int i,Tequation *eq);
00805 
00815 unsigned int GetNumMonomials(Tequation *eq);
00816 
00833 void LinearEquation2LinearConstraint(TLinearConstraint *lc,Tequation *eq);
00834 
00850 double EvaluateEquation(double *varValues,Tequation *eq);
00851 
00864 void EvaluateEquationInt(Tinterval *varValues,Tinterval *i_out,Tequation *eq);
00865 
00875 void DeriveEquation(unsigned int nv,Tequation *d,Tequation *eq);
00876 
00895 void PrintMonomials(FILE *f,char **varNames,Tequation *eq);
00896 
00911 void PrintEquation(FILE *f,char **varNames,Tequation *eq);
00912 
00920 void DeleteEquation(Tequation *eq);
00921 
00922 #endif