diff options
Diffstat (limited to 'geometry.h')
-rw-r--r-- | geometry.h | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/geometry.h b/geometry.h new file mode 100644 index 0000000..c936e59 --- /dev/null +++ b/geometry.h @@ -0,0 +1,50 @@ +#ifndef GEOMETRY_H_ +#define GEOMETRY_H_ + + +#define EDGE_NONE 0 +#define EDGE_LEFT (1<<0) +#define EDGE_RIGHT (1<<1) +#define EDGE_TOP (1<<2) +#define EDGE_BOTTOM (1<<3) +#define EDGE_ALL (EDGE_LEFT|EDGE_RIGHT|EDGE_TOP|EDGE_BOTTOM) + +#define INTERSECTION_ERROR -1 +#define INTERSECTION_NONE 0 +#define INTERSECTION_IDENTICAL 1 +#define INTERSECTION_LINE_LINE 2 +#define INTERSECTION_LINE_SEGMENT 3 +#define INTERSECTION_SEGMENT_LINE 4 +#define INTERSECTION_SEGMENT_SEGMENT 5 + + +typedef struct _VERTEX { + double x, y; +} VERTEX; + +typedef struct _RECTANGLE { + double x, y, width, height; +} RECTANGLE; + +typedef struct _LINE { + VERTEX v1, v2; +} LINE; + +typedef struct _VERTEX_LIST { + unsigned int nVertices; + VERTEX *vertices; +} VERTEX_LIST, POLYGON; + + +void addVertex(VERTEX_LIST *list, VERTEX *v); +void insertVertex(VERTEX_LIST *list, VERTEX *v, unsigned int n); +void deleteVertex(VERTEX_LIST *list, unsigned int n); + + +int vertexInRect(const VERTEX *v, const RECTANGLE *rect); +int lineIntersection(const LINE *la, const LINE *lb, VERTEX *v); +int lineRectIntersection(const LINE *l, const RECTANGLE *rect, int edge, VERTEX *v); +int lineRectIntersections(const LINE *line, const RECTANGLE *rect, int edge, VERTEX *v1, VERTEX *v2); +void simplifyPolygon(const POLYGON *in, const RECTANGLE *rect, POLYGON *out); + +#endif /*GEOMETRY_H_*/ |