54 lines
1.5 KiB
C
54 lines
1.5 KiB
C
#ifndef GEOMETRY_H_
|
|
#define GEOMETRY_H_
|
|
|
|
|
|
#include <glib.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 2
|
|
#define INTERSECTION_LINE_LINE 2
|
|
#define INTERSECTION_LINE_SEGMENT 3
|
|
#define INTERSECTION_SEGMENT_LINE 6
|
|
#define INTERSECTION_SEGMENT_SEGMENT 7
|
|
|
|
|
|
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);
|
|
gboolean vertexInPolygon(const VERTEX *v, const POLYGON *p);
|
|
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_*/
|