home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / misc / volume38 / tessel / part02 / tessel.h < prev    next >
Text File  |  1993-06-21  |  2KB  |  54 lines

  1. /*+-----------------------------------------------------------------------+
  2.  *| This header file is for use with the 'C' source module 'tessel.c'.    |
  3.  *|                                                                       |
  4.  *| Author: Michael S. A. Robb         Version: 1.1        Date: 29/05/93 |
  5.  *+-----------------------------------------------------------------------+
  6.  */
  7.  
  8. #define CONSTANT_ONE   0x10000L
  9. typedef long MATDATA;
  10.  
  11. /*+-----------------------------------------------------------------------+
  12.  *| Function prototypes.                                                  |
  13.  *+-----------------------------------------------------------------------+
  14.  */
  15.  
  16. void polygon_tesselate(            int nverts, COORD *vlist );
  17. void polygon_tesselate_convex(     int nverts, COORD *vlist );
  18. void polygon_tesselate_concave(    int nverts, COORD *vlist );
  19. void polygon_tesselate_complex(    int nverts, COORD *vlist );
  20. void polygon_tesselate_noncomplex( int nverts, COORD *vlist );
  21.  
  22. int  polygon_clockwise(            int nverts, COORD *vlist );
  23. void polygon_reverse(              int nverts, COORD *vlist );
  24. int  polygon_convex(               int nverts, COORD *vlist );
  25. int  polygon_complex(              int nverts, COORD *vlist );
  26.  
  27. void polygon_setproc(           void (*polygon_proc)( COORD *triangle ) );
  28.  
  29. /*+-----------------------------------------------------------------------+
  30.  *| Some useful macros for angle/polygon/coordinate/triangle tests.       |
  31.  *+-----------------------------------------------------------------------+
  32.  */
  33.  
  34. #define MATRIX_DET_2X2( C1, C2, C3, C4 )\
  35.           ( ( (MATDATA) (C2).c_xpos - (MATDATA) (C1).c_xpos )\
  36.           * ( (MATDATA) (C4).c_ypos - (MATDATA) (C3).c_ypos )\
  37.           - ( (MATDATA) (C4).c_xpos - (MATDATA) (C3).c_xpos )\
  38.           * ( (MATDATA) (C2).c_ypos - (MATDATA) (C1).c_ypos ))
  39.  
  40. #define COORD_ANGLE( VL, C1, C2, C3 )\
  41.             MATRIX_DET_2X2( VL[C3], VL[C1], VL[C2], VL[C1] )
  42.  
  43. #define ANGLE_NONCONVEX( VL, C1, C2, C3 )\
  44.             ( COORD_ANGLE( VL, C1, C2, C3 ) >= 0 )
  45.  
  46. #define ANGLE_CONVEX( VL, C1, C2, C3 )\
  47.             ( COORD_ANGLE( VL, C1, C2, C3 ) < 0 )
  48.  
  49. #define COORD_OUTSIDE_TRIANGLE( VL, T1, T2, T3, C )\
  50.           ( MATRIX_DET_2X2( VL[T2], VL[T1], VL[C], VL[T1] )< 0 ||\
  51.             MATRIX_DET_2X2( VL[T3], VL[T2], VL[C], VL[T2] )< 0 ||\
  52.             MATRIX_DET_2X2( VL[T1], VL[T3], VL[C], VL[T3] )< 0 )
  53.  
  54.