30 #include "graleconfig.h"
32 #include <errut/errorbase.h>
41 GridSquare(Vector2D<double> center,
double size) { m_center = center; m_size = size; }
43 double getSize()
const {
return m_size; }
44 Vector2D<double> getCenter()
const {
return m_center; }
45 Vector2D<double> getBottomLeft()
const {
return Vector2D<double>(m_center.getX()-m_size/2.0,m_center.getY()-m_size/2.0); }
46 Vector2D<double> getTopRight()
const {
return Vector2D<double>(m_center.getX()+m_size/2.0,m_center.getY()+m_size/2.0); }
48 Vector2D<double> m_center;
52 class GRALE_IMPORTEXPORT Grid :
public errut::ErrorBase
58 void getSquares(std::list<GridSquare> &gridSquares)
const;
60 bool buildUniform(Vector2D<double> center,
double size,
int subdiv);
61 bool buildDensity(Real2DFunction &f, Vector2D<double> center,
double size,
double subdivfraction,
62 int xdiv,
int ydiv,
bool abs,
bool keeplarger);
63 bool buildDensity(Real2DFunction &f, Vector2D<double> center,
double size,
int minsquares,
int maxsquares,
64 int xdiv,
int ydiv,
bool abs,
bool keeplarger);
65 bool buildGradient(Real2DDerivableFunction &f, Vector2D<double> center,
double size,
double subdivfraction,
66 int xdiv,
int ydiv,
bool keeplarger);
67 bool buildDensityAndGradient(Real2DDerivableFunction &f, Vector2D<double> center,
double size,
68 double denssubdivfraction,
double gradsubdivfraction,
69 int xdiv,
int ydiv,
bool abs,
bool denskeeplarger,
71 bool buildDensityAndGradient(Real2DDerivableFunction &f, Vector2D<double> center,
double size,
int minsquares,
72 int maxsquares,
int xdiv,
int ydiv,
bool abs,
bool keeplarger);
77 RationalNumber(
int num,
int denom) { a = num; b = denom; }
79 int GetNumerator()
const {
return a; }
80 int GetDenominator()
const {
return b; }
81 double GetRealValue()
const {
return ((
double)a)/((double)b); }
82 bool operator==(
const RationalNumber &r)
const {
if (a == r.a && b == r.b)
return true;
return false; }
87 class RationalGridSquare
90 RationalGridSquare(RationalNumber xc, RationalNumber yc, RationalNumber s) : xcenter(xc),ycenter(yc),sz(s)
92 RationalNumber GetCenterX()
const {
return xcenter; }
93 RationalNumber GetCenterY()
const {
return ycenter; }
94 RationalNumber GetSize()
const {
return sz; }
95 bool operator==(
const RationalGridSquare &g)
const {
if (xcenter == g.xcenter && ycenter == g.ycenter && sz == g.sz)
return true;
return false; }
97 bool isMarked()
const {
return m_marked; }
98 void setMarker() { m_marked =
true; }
100 RationalNumber xcenter,ycenter,sz;
104 class GradientFunction :
public Real2DFunction
107 GradientFunction(Real2DDerivableFunction &g) : f(g) { }
108 ~GradientFunction() { }
109 double operator()(Vector2D<double> v)
const {
return f.getGradient(v).getLength(); }
111 Real2DDerivableFunction &f;
114 std::list<RationalGridSquare> grid;
115 Vector2D<double> gridcenter;
121 #endif // GRALE_GRID_H