home *** CD-ROM | disk | FTP | other *** search
/ The C Users' Group Library 1994 August / wc-cdrom-cusersgrouplibrary-1994-08.iso / listings / v_09_12 / 9n12050b < prev    next >
Text File  |  1991-10-14  |  1KB  |  40 lines

  1. #include "solid.h"
  2.  
  3. struct vector normal_vector(struct solid_obj *obj_ptr,
  4.     struct facet *facet_ptr)
  5. /*  Returns vector normal to a facet */
  6. {
  7.     struct vertex *vertex_ptr;
  8.     static float x_coord[3], y_coord[3], z_coord[3];
  9.         /* coordinates of first 3 vertices of facet */
  10.     static int vertex_ref_index; /* index of current
  11.         vertex for current facet */
  12.     struct vector normal;
  13.  
  14.     for (vertex_ref_index = 0; vertex_ref_index <
  15.         facet_ptr->vertex_count; ++vertex_ref_index) {
  16.         vertex_ptr = obj_ptr->vertex_first +
  17.             facet_ptr->vertex_index[vertex_ref_index];
  18.             /* save coords of first 3 vertices */
  19.         if (vertex_ref_index < 3) {
  20.             x_coord[vertex_ref_index] = vertex_ptr->
  21.                 coord[0];
  22.             y_coord[vertex_ref_index] = vertex_ptr->
  23.                 coord[1];
  24.             z_coord[vertex_ref_index] = vertex_ptr->
  25.                 coord[2];
  26.         }
  27.     }
  28.  
  29.     normal.x = (y_coord[1] - y_coord[0]) * (z_coord[2]
  30.         - z_coord[1]) - (z_coord[1] - z_coord[0]) *
  31.         (y_coord[2] - y_coord[1]); normal.y =
  32.         (z_coord[1] - z_coord[0]) * (x_coord[2] -
  33.         x_coord[1]) - (x_coord[1] - x_coord[0]) *
  34.         (z_coord[2] - z_coord[1]);
  35.     normal.z = (x_coord[1] - x_coord[0]) * (y_coord[2]
  36.         - y_coord[1]) - (y_coord[1] - y_coord[0]) *
  37.         (x_coord[2] - x_coord[1]);
  38.     return(normal);
  39. }
  40.