/*
 * Part of triangulate.c, Copyright (c) 1989, Paul Bourke
 *
 * From "Efficient Triangulation Algorithm Suitable for Terrain Modelling"
 * http://paulbourke.net/papers/triangulate/
 *
 * "Any source code found here may be freely used provided credits are given
 *  to the author." - http://paulbourke.net/papers/
 *
 * Additional tuning & optimisation by Jeffrey Lee
 */

#ifndef TRIANGULATE_H
#define TRIANGULATE_H

typedef struct {
   int8_t p1,p2,p3;
} ITRIANGLE;
typedef struct {
   float x,y;
} XYZ;

/*
   Triangulation subroutine
   Takes as input NV vertices in array pxyz
   Returned is a list of ntri triangular faces in the array v
   These triangles are arranged in a consistent clockwise order.
   The triangle array 'v' should be malloced to 3 * nv
   The vertex array pxyz must be big enough to hold 3 more points
   The vertex array must be sorted in increasing x values say

   qsort(p,nv,sizeof(XYZ),XYZCompare);
      :
   int XYZCompare(void *v1,void *v2)
   {
      XYZ *p1,*p2;
      p1 = v1;
      p2 = v2;
      if (p1->x < p2->x)
         return(-1);
      else if (p1->x > p2->x)
         return(1);
      else
         return(0);
   }
*/
extern void Triangulate(int nv,XYZ *pxyz,ITRIANGLE *v,int *ntri);
   
#endif
