// Demonstrates InCircle test for Delaunay Triangulation #include #include #define X 0 #define Y 1 #define Z 2 #define MAX (100) // These map coordinates to 0 ... 530 #define TRANSX(X) (530.0*((X)-xmin)/xdiff) #define TRANSY(Y) (530.0*((Y)-ymin)/ydiff) #define sqr(X) ((X)*(X)) /*--------------------------------------------------------------------- O'Rourke ---------------------------------------------------------------------*/ double Volumei(int a[3], int b[3], int c[3], int p[3]) { double vol; double ax, ay, az, bx, by, bz, cx, cy, cz; ax = a[X] - p[X]; ay = a[Y] - p[Y]; az = a[Z] - p[Z]; bx = b[X] - p[X]; by = b[Y] - p[Y]; bz = b[Z] - p[Z]; cx = c[X] - p[X]; cy = c[Y] - p[Y]; cz = c[Z] - p[Z]; vol = ax * (by*cz - bz*cy) + ay * (bz*cx - bx*cz) + az * (bx*cy - by*cx); return vol; } int AreaSign2( int a[3], int b[3], int c[3] ) { double area2; area2 = ( b[0] - a[0] ) * (double)( c[1] - a[1] ) - ( c[0] - a[0] ) * (double)( b[1] - a[1] ); /* The area should be an integer. */ if ( area2 > 0.5 ) return 1; else if ( area2 < -0.5 ) return -1; else return 0; } main() { int pt[MAX][3],n=0; double A,B,C,D,E,F,G; double center[2],radius; double xmin,ymin,xmax,ymax,xdiff,ydiff,xmid,ymid; double vol; int asign,i; while (nxmax) xmax=pt[i][X]; if (center[X]+radius>xmax) xmax=center[X]+radius; if (center[X]-radiusymax) ymax=pt[i][Y]; if (center[Y]+radius>ymax) ymax=center[Y]+radius; if (center[Y]-radiusydiff) ydiff=xdiff; else xdiff=ydiff; printf("%%!PS\n"); printf("%%%%BoundingBox: 0 0 605 755\n"); printf("%%%%EndComments\n"); printf("40 155 translate\n"); printf("newpath\n"); printf("%f %f 8 0 360 arc stroke\n", TRANSX(center[X]),TRANSY(center[Y])); printf("%f %f %f 0 360 arc stroke\n", TRANSX(center[X]),TRANSY(center[Y]), TRANSX(center[X]+radius)-TRANSX(center[X])); asign=AreaSign2(pt[0],pt[1],pt[2]); // Just in case not counterclockwise fprintf(stderr,"asign is %d\n",asign); for (i=0;i0.0) // Inside circle printf("%f %f 2 0 360 arc fill\n",TRANSX(pt[i][X]),TRANSY(pt[i][Y])); else // Outside circle printf("%f %f 6 0 360 arc fill\n",TRANSX(pt[i][X]),TRANSY(pt[i][Y])); } printf("showpage\n\n"); printf("%%EOF\n"); }