1
2
3
4
5
6
7
8
9
10
11
|
1
2
3
4
5
6
7
8
9
10
11
12
|
+
|
#ifndef GEOMETRY_H
#define GEOMETRY_H
#include <cmath>
#include <vector>
#include "clipper.hpp"
#define EPSILON 0.0001
/**
* Contains two coordinates on different axises, often referred to as x and y.
*/
class Point{
public:
|
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
+
+
+
-
+
+
+
+
+
+
+
+
+
|
* alters the position specified by this point, adding dx to x and dy
* to y.
*/
void add(double dx,double dy){
x+=dx;
y+=dy;
}
/**
* Get the difference between this vector and another.
*/
Point getDifference(Point a)const{
return Point(a.x-x,a.y-y);
}
/**
* Get the point in between this point and another.
*/
Point getMidPoint(const Point& a)const{
double dx=a.x-x;
double dy=a.y-y;
return Point(dx/2,dy/2);
}
/**
* Make it as easy as possible to do things with clipper.
*/
ClipperLib::IntPoint getAsClipper()const{
return ClipperLib::IntPoint(std::round(x),std::round(y));
}
};
/**
* Compute the distance between two points
* */
double Distance(const Point&a,const Point&b);
/**
* Compare two doubles with an error value which, should the difference be
|
207
208
209
210
211
212
213
214
215
216
|
219
220
221
222
223
224
225
226
227
228
229
230
231
|
+
+
+
|
/**
* Add a point to end of the polygon(connected to the first point and the
* last point previously specified).
*/
void addPoint(const Point &i);
double getArea()const;
std::vector<Point> getInterior()const;
Polygon Union(const Polygon&)const;
Polygon Difference(const Polygon&)const;
Polygon Intersection(const Polygon&)const;
};
#endif
|