00001
00002
00003
00004
00005
00006 #ifndef __ALGEBRAIC_H
00007 #define __ALGEBRAIC_H
00008
00009 #include "Implicit/Implicit.h"
00010
00011
00012
00013
00014
00015 class Algebraic : public Implicit
00016 {
00017 private:
00018 void init(int);
00019
00020 public:
00021 Algebraic();
00022 Algebraic(int degree);
00023 ~Algebraic();
00024
00025 #ifndef INTERVAL_EVAL_ONLY
00026 virtual double proc(gmVector3 x);
00027 virtual gmVector3 grad(gmVector3 v);
00028 virtual gmMatrix3 hess(gmVector3 v);
00029 #endif
00030
00031 virtual Intervald proc(Box<double>);
00032 virtual Box3d grad(Box<double>);
00033 virtual IMatrix3d hess(Box<double>);
00034
00035
00036 int degree();
00037 void degree(int);
00038
00039
00040 int getNumCoef();
00041
00042 static int coefficients(int);
00043
00044
00045 int getCoefIndex(int i, int j, int k);
00046
00047 double getCoef(int i, int j, int k);
00048 void setCoef(int i, int j, int k, double a);
00049
00050 virtual void procq(gmVector3, double*);
00051 virtual void procq(Box<double>, Intervald*);
00052 virtual void gradq(Box<double>, Intervald*, Intervald*, Intervald*);
00053
00054 virtual void getq(double*);
00055 virtual void _setq(double*);
00056 virtual int qlen();
00057 virtual void getqname(char** qn);
00058
00059 MAKE_NAME();
00060
00061 private:
00062
00063
00064
00065 double *m_a;
00066
00067
00068 Intervald m_alrp(int,Intervald);
00069
00070 protected:
00071
00072 int m_d;
00073
00074
00075
00076
00077
00078 int m_numCoef;
00079
00080
00081 int *m_x;
00082
00083
00084 int *m_y;
00085
00086
00087 int *m_z;
00088
00089
00090 double *m_xPow;
00091
00092
00093 double *m_yPow;
00094
00095
00096 double *m_zPow;
00097
00098 void initPowerArrays();
00099 void initXYZPowerArrays(gmVector3 v);
00100 void initDerivCoefs(void);
00101 void calcNumCoef();
00102
00103 double dx(gmVector3 v);
00104 double dy(gmVector3 v);
00105 double dz(gmVector3 v);
00106
00107 double dx2(gmVector3 v);
00108 double dy2(gmVector3 v);
00109 double dz2(gmVector3 v);
00110
00111 double dxdy(gmVector3 v);
00112 double dxdz(gmVector3 v);
00113 double dydz(gmVector3 v);
00114 };
00115
00116 #endif
00117