This repository has been archived on 2025-03-02. You can view files and clone it, but cannot push or open issues or pull requests.
neofx-zoomedit/geometry.h
2007-09-15 17:54:02 +00:00

62 lines
1.8 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, const VERTEX *v);
void insertVertex(VERTEX_LIST *list, const VERTEX *v, unsigned int n);
void deleteVertex(VERTEX_LIST *list, unsigned int n);
double vertexDistanceSquare(const VERTEX *v1, const VERTEX *v2);
double vertexDistance(const VERTEX *v1, const VERTEX *v2);
int vertexOnLine(const VERTEX *v, const LINE *l);
int vertexInRect(const VERTEX *v, const RECTANGLE *rect);
gboolean vertexInPolygon(const VERTEX *v, const POLYGON *p);
double polygonPerimeter(const POLYGON *p);
double polygonArea(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);
gboolean linePolygonIntersection(const LINE *l, const POLYGON *p);
void simplifyPolygon(const POLYGON *in, const RECTANGLE *rect, POLYGON *out);
#endif /*GEOMETRY_H_*/