📄 cogregionfunction.hxx
字号:
#ifndef cogregionfunction_hxx#define cogregionfunction_hxx#ifndef cog_hxx#include "cog.hxx"#endif#include "cog1d.hxx"class CogeometryCharFunction: public CogeometryDecorator{ wzFloat level; wzIndex modus; wzRegion old; wzRegion region; wzIndex func;public: CogeometryCharFunction(cogeometry o, wzRegion r, wzIndex f=0, wzFloat l=0) :CogeometryDecorator(o),level(l),func(f),region(r),modus(0),old(){;} void inRegion(wzRegion r) {old=r; modus=1;} void notInRegion(wzRegion r) {old=r; modus=2;} void setLevel(wzFloat l) {level=l;} cogIndex Point(cogPoint& p0) const;};class CogeometryWithRegions: public Cogeometry{ const wzPointToSegment& f;public: CogeometryWithRegions(const wzPointToSegment& func) :f(func){;} CogeometryWithRegions(cogSegment (*func)(const cogPoint& p)) :f(* new wzSimplePointToSegment(func)) {;} cogIndex Point(cogPoint& p0) const;};// this uses a real-valued function and an 1D geometry to define a geometry;class CogeometryByFunction: public Cogeometry{ const wzPointToFloat& f; cogeometry g;public: CogeometryByFunction(const wzPointToFloat& func) :f(func),g(new Cogeometry1D()){;} CogeometryByFunction(const wzPointToFloat& func, cogeometry geom1D) :f(func),g(geom1D){;} CogeometryByFunction(wzFloat (*func)(const wzPoint& p)) :f(* new wzSimplePointToFloat(func)),g(new Cogeometry1D()) {;} CogeometryByFunction(wzFloat (*func)(const wzPoint& p), cogeometry geom1D) :f(* new wzSimplePointToFloat(func)),g(geom1D) {;} virtual cogIndex Point(cogPoint& p0) const; virtual wzIndex BoundaryCondition(cogFlag1& f) const;};class CogeometryByMap: public Cogeometry{ const wzPointToPoint& m; cogeometry g;public: CogeometryByMap(const wzPointToPoint& map ,cogeometry geom) :m(map),g(geom){;} CogeometryByMap(void (*map)(wzPoint& p, const wzPoint& o) ,cogeometry geom) :m(* new wzSimplePointToPoint(map)),g(geom){;} cogIndex Point(cogPoint& p0) const;};// pattern for special functions implementation - see also simple.hxxclass CogeometrySimpleRegions: public wzPointToSegment, public CogeometryWithRegions{public: cogSegment (*f)(const cogPoint& p); CogeometrySimpleRegions(cogSegment (*func)(const cogPoint& p)) :CogeometryWithRegions(*(wzPointToSegment*)this),f(func){;} cogSegment operator()(const cogPoint& p) const {return f(p);}};class CogeometrySimpleFunction: public wzPointToFloat, public CogeometryByFunction{public: cogFloat (*f)(const cogPoint& p); CogeometrySimpleFunction(cogFloat (*func)(const cogPoint& p) ,cogeometry geom) // = new Cogeometry1D()) :CogeometryByFunction(*(wzPointToFloat*)this,geom),f(func){;} cogFloat operator()(const cogPoint& p) const {return f(p);}};class CogeometrySimpleMap: public wzPointToPoint, public CogeometryByMap{public: void (*m)(cogPoint&, const cogPoint&); CogeometrySimpleMap(void (*map)(cogPoint&,const cogPoint&) ,cogeometry geom) // = new Cogeometry1D()) :CogeometryByMap(*(wzPointToPoint*)this,geom),m(map){;} void operator()(cogPoint& p, const cogPoint& pold) const {m(p,pold);}};#define CogeometryOfRegions CogeometrySimpleRegions#define CogeometryByRegions CogeometryWithRegions#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -