home *** CD-ROM | disk | FTP | other *** search
/ RISC DISC 3 / RISC_DISC_3.iso / resources / etexts / gems / gemsv / ch7_5 / basic.h next >
Encoding:
C/C++ Source or Header  |  1994-09-11  |  2.1 KB  |  113 lines

  1. #include <sys/types.h>
  2. #include <stdlib.h>
  3. #include <stdio.h>
  4.  
  5. typedef struct {
  6.   double x, y;
  7. } point_t, vector_t;
  8.  
  9. typedef struct {
  10.   point_t v0, v1;
  11.   int is_inserted;
  12.   int root0, root1;
  13. } segment_t;
  14.  
  15. typedef struct {
  16.   int lseg, rseg;
  17.   point_t hi, lo;
  18.   int u0, u1;
  19.   int d0, d1;
  20.   int sink;
  21.   int usave, uside;
  22.   int state;
  23. } trap_t;
  24.  
  25. typedef struct {
  26.   int nodetype;
  27.   int segnum;
  28.   point_t yval;
  29.   int trnum;
  30.   int parent;
  31.   int left, right;
  32. } node_t;
  33.  
  34. typedef struct {
  35.   int vnum;
  36.   int next;
  37.   int prev;
  38. } monchain_t;
  39.  
  40. typedef struct {
  41.   point_t pt;
  42.   int vnext[4];            /* next vertices for the 4 chains */
  43.   int vpos[4];            /* position of v in the 4 chains */
  44.   int nextfree;
  45. } vertexchain_t;
  46.  
  47. struct global_s {
  48.   int nseg;
  49. };
  50.  
  51. #define T_X     1
  52. #define T_Y     2
  53. #define T_SINK  3
  54.  
  55. #define QSIZE   800        /* maximum table sizes */
  56. #define TRSIZE  400        /* max# trapezoids */
  57. #define SEGSIZE 100        /* max# of segments */
  58.  
  59. #define TRUE  1
  60. #define FALSE 0
  61.  
  62. #define FIRSTPT 1        /* checking whether pt. is inserted */ 
  63. #define LASTPT  2
  64.  
  65. #define EPS 0.000005
  66.  
  67. #define INFINITY 1<<30
  68.  
  69. #define C_EPS 1.0e-7
  70.  
  71. #define S_LEFT 1        /* for merge-direction */
  72. #define S_RIGHT 2
  73.  
  74. #define ST_VALID 1        /* for trapezium table */
  75. #define ST_INVALID 2
  76.  
  77. #define SP_SIMPLE_LRUP 1    /* for splitting trapezoids */
  78. #define SP_SIMPLE_LRDN 2
  79. #define SP_2UP_2DN     3
  80. #define SP_2UP_LEFT    4
  81. #define SP_2UP_RIGHT   5
  82. #define SP_2DN_LEFT    6
  83. #define SP_2DN_RIGHT   7
  84. #define SP_NOSPLIT    -1    
  85.  
  86. #define TR_FROM_UP 1        /* for traverse-direction */
  87. #define TR_FROM_DN 2
  88.  
  89. #define TRI_LHS 1
  90. #define TRI_RHS 2
  91.  
  92.  
  93. #define MAX(a, b) (((a) > (b)) ? (a) : (b))
  94. #define MIN(a, b) (((a) < (b)) ? (a) : (b))
  95.  
  96. #define CROSS(v0, v1, v2) (((v1).x - (v0).x)*((v2).y - (v0).y) - \
  97.                ((v1).y - (v0).y)*((v2).x - (v0).x))
  98.  
  99. #define DOT(v0, v1) ((v0).x * (v1).x + (v0).y * (v1).y)
  100.  
  101. #define MODULO_NEXT(v0, n) (((v0) - 1) % (n) + 1)
  102.  
  103. #define FP_EQUAL(s, t) (fabs(s - t) <= C_EPS)
  104.  
  105.  
  106. /* Global variables */
  107.  
  108. node_t qs[QSIZE];        /* Query structure */
  109. trap_t tr[TRSIZE];        /* Trapezoid structure */
  110. segment_t seg[SEGSIZE];        /* Segment table */
  111.  
  112. struct global_s global;
  113.