1 |
greg |
2.3 |
/* RCSid $Id: triangulate.h,v 2.2 2014/01/24 01:26:44 greg Exp $ */ |
2 |
greg |
2.1 |
/* |
3 |
|
|
* triangulate.h |
4 |
|
|
* |
5 |
|
|
* Adapted by Greg Ward on 1/23/14. |
6 |
|
|
* Copyright 2014 Anyhere Software. All rights reserved. |
7 |
|
|
* |
8 |
|
|
*/ |
9 |
|
|
|
10 |
|
|
/* COTD Entry submitted by John W. Ratcliff [[email protected]] */ |
11 |
|
|
|
12 |
|
|
/**** THIS IS A CODE SNIPPET WHICH WILL EFFICIEINTLY TRIANGULATE ANY |
13 |
|
|
// ** POLYGON/CONTOUR (without holes) AS A STATIC CLASS. THIS SNIPPET |
14 |
|
|
// ** IS COMPRISED OF 3 FILES, TRIANGULATE.H, THE HEADER FILE FOR THE |
15 |
|
|
// ** TRIANGULATE BASE CLASS, TRIANGULATE.CPP, THE IMPLEMENTATION OF |
16 |
|
|
// ** THE TRIANGULATE BASE CLASS, AND TEST.CPP, A SMALL TEST PROGRAM |
17 |
|
|
// ** DEMONSTRATING THE USAGE OF THE TRIANGULATOR. THE TRIANGULATE |
18 |
|
|
// ** BASE CLASS ALSO PROVIDES TWO USEFUL HELPER METHODS, ONE WHICH |
19 |
|
|
// ** COMPUTES THE AREA OF A POLYGON, AND ANOTHER WHICH DOES AN EFFICENT |
20 |
|
|
// ** POINT IN A TRIANGLE TEST. |
21 |
|
|
// ** SUBMITTED BY JOHN W. RATCLIFF ([email protected]) July 22, 2000 |
22 |
|
|
*/ |
23 |
|
|
|
24 |
|
|
/**********************************************************************/ |
25 |
|
|
/************ HEADER FILE FOR TRIANGULATE.C ***************************/ |
26 |
|
|
/**********************************************************************/ |
27 |
|
|
|
28 |
|
|
#ifndef TRIANGULATE_H |
29 |
|
|
#define TRIANGULATE_H |
30 |
|
|
|
31 |
|
|
#ifdef __cplusplus |
32 |
|
|
extern "C" { |
33 |
|
|
#endif |
34 |
|
|
|
35 |
|
|
typedef struct { |
36 |
|
|
double mX, mY; |
37 |
|
|
} Vert2; |
38 |
|
|
|
39 |
|
|
typedef struct { |
40 |
|
|
int nv; /* number of vertices */ |
41 |
|
|
void *p; /* client data pointer */ |
42 |
|
|
Vert2 v[3]; /* extends struct */ |
43 |
|
|
} Vert2_list; |
44 |
|
|
|
45 |
|
|
/* allocate a polygon list */ |
46 |
|
|
extern Vert2_list *polyAlloc(int nv); |
47 |
|
|
|
48 |
|
|
#define polyFree free |
49 |
|
|
|
50 |
|
|
/* callback for output triangle */ |
51 |
greg |
2.2 |
typedef int tri_out_t(const Vert2_list *tp, int a, int b, int c); |
52 |
greg |
2.1 |
|
53 |
greg |
2.3 |
/* triangulate a polygon, send results to the given callback function */ |
54 |
greg |
2.1 |
extern int polyTriangulate(const Vert2_list *contour, tri_out_t *cb); |
55 |
|
|
|
56 |
|
|
/* compute area of a contour/polygon */ |
57 |
|
|
extern double polyArea(const Vert2_list *contour); |
58 |
|
|
|
59 |
greg |
2.3 |
/* decide if point P is inside triangle defined by ABC */ |
60 |
greg |
2.1 |
extern int insideTriangle(double Ax, double Ay, |
61 |
|
|
double Bx, double By, |
62 |
|
|
double Cx, double Cy, |
63 |
|
|
double Px, double Py); |
64 |
|
|
|
65 |
|
|
#ifdef __cplusplus |
66 |
|
|
} |
67 |
|
|
#endif |
68 |
|
|
|
69 |
|
|
#endif |