00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033 #ifndef _GORECTDOMAIN_H
00034 #define _GORECTDOMAIN_H
00035
00036 #include "Array.h"
00037 #include "Domain.h"
00038
00039 namespace Go
00040 {
00043
00044
00049 class RectDomain : public Domain
00050 {
00051 public:
00053 RectDomain() {}
00054
00059 RectDomain(const Array<double, 2>& corner1,
00060 const Array<double, 2>& corner2);
00061
00063 virtual ~RectDomain();
00064
00065
00066
00067 virtual bool isInDomain(const Array<double, 2>& point,
00068 double tolerance) const;
00069
00070
00071
00072 virtual bool isOnBoundary(const Array<double, 2>& point,
00073 double tolerance) const;
00074
00075 bool isOnCorner(const Array<double, 2>& point,
00076 double tolerance) const;
00077
00078 int whichBoundary(const Array<double, 2>& point1, const Array<double, 2>& point2,
00079 double tolerance) const;
00080
00084
00085 virtual void closestInDomain(const Array<double, 2>& point,
00086 Array<double, 2>& clo_pt,
00087 double tolerance) const;
00088
00093
00094 virtual void closestOnBoundary(const Array<double, 2>& point,
00095 Array<double, 2>& clo_bd_pt,
00096 double tolerance) const;
00097
00100 void addUnionWith(const RectDomain& rd);
00101
00105 void intersectWith(const RectDomain& rd);
00106
00109 double umin() const { return ll_[0]; }
00110
00113 double umax() const { return ur_[0]; }
00114
00117 double vmin() const { return ll_[1]; }
00118
00121 double vmax() const { return ur_[1]; }
00122
00125 Array<double, 2> lowerLeft() const { return ll_; }
00126
00129 Array<double, 2> upperRight() const { return ur_; }
00130
00131 private:
00132
00133 Array<double, 2> ll_;
00134 Array<double, 2> ur_;
00135 };
00136
00137
00139 }
00140
00141 #endif // _GORECTDOMAIN_H
00142
00143