Merge pull request #29 from mindbrix/useInCircle

Use inCircle()
diff --git a/Source/geom.c b/Source/geom.c
index 97a5046..6600554 100755
--- a/Source/geom.c
+++ b/Source/geom.c
@@ -260,30 +260,34 @@
 		v->t = Interpolate( z1, o2->t, z2, d2->t );

 	}

 }

-

-/*

-	Calculate the angle between v1-v2 and v1-v0

- */

-TESSreal calcAngle( TESSvertex *v0, TESSvertex *v1, TESSvertex *v2 )

-{

-	TESSreal num, den, ax, ay, bx, by;

-	ax = v2->s - v1->s;

-	ay = v2->t - v1->t;

-	bx = v0->s - v1->s;

-	by = v0->t - v1->t;

-	num = ax * bx + ay * by;

-	den = sqrt( ax * ax + ay * ay ) * sqrt( bx * bx + by * by );

-	if ( den > 0.0 ) num /= den;

-	if ( num < -1.0 ) num = -1.0;

-	if ( num >  1.0 ) num =  1.0;

-	return acos( num );

-}

+
+TESSreal inCircle( TESSvertex *v, TESSvertex *v0, TESSvertex *v1, TESSvertex *v2 ) {
+	TESSreal adx, ady, bdx, bdy, cdx, cdy;
+	TESSreal abdet, bcdet, cadet;
+	TESSreal alift, blift, clift;
+
+	adx = v0->s - v->s;
+	ady = v0->t - v->t;
+	bdx = v1->s - v->s;
+	bdy = v1->t - v->t;
+	cdx = v2->s - v->s;
+	cdy = v2->t - v->t;
+
+	abdet = adx * bdy - bdx * ady;
+	bcdet = bdx * cdy - cdx * bdy;
+	cadet = cdx * ady - adx * cdy;
+
+	alift = adx * adx + ady * ady;
+	blift = bdx * bdx + bdy * bdy;
+	clift = cdx * cdx + cdy * cdy;
+
+	return alift * bcdet + blift * cadet + clift * abdet;
+}
 

 /*

 	Returns 1 is edge is locally delaunay

  */

 int tesedgeIsLocallyDelaunay( TESShalfEdge *e )

-{

-	return (calcAngle(e->Lnext->Org, e->Lnext->Lnext->Org, e->Org) +

-			calcAngle(e->Sym->Lnext->Org, e->Sym->Lnext->Lnext->Org, e->Sym->Org)) < (M_PI + 0.01);

+{
+	return inCircle(e->Sym->Lnext->Lnext->Org, e->Lnext->Org, e->Lnext->Lnext->Org, e->Org) < 0;
 }