intersect.c
上传用户:xk288cn
上传日期:2007-05-28
资源大小:4876k
文件大小:2k
源码类别:

GIS编程

开发平台:

Visual C++

  1. /*
  2.  * FUNCTION:
  3.  * This file contains a number of utilities useful to 3D graphics in
  4.  * general, and to the generation of tubing and extrusions in particular
  5.  * 
  6.  * HISTORY:
  7.  * Written by Linas Vepstas, August 1991
  8.  */
  9. #include "gutil.h"
  10. #include "intersect.h"
  11. /* ========================================================== */
  12. /* 
  13.  * The macro and subroutine INTERSECT are designed to compute the
  14.  * intersection of a line (defined by the points v1 and v2) and a plane
  15.  * (defined as plane which is normal to the vector n, and contains the
  16.  * point p).  Both sect the array "sect", which is the point of
  17.  * interesection.
  18.  * 
  19.  * The subroutine returns a value indicating if the specified inputs
  20.  * represented a degenerate case. Valid is TRUE if the computed
  21.  * intersection is valid, else it is FALSE.
  22.  */
  23. /* ========================================================== */
  24. void intersect (gleDouble sect[3], /* returned */
  25.                 gleDouble p[3], /* input */
  26.                 gleDouble n[3], /* input */
  27.                 gleDouble v1[3], /* input */
  28.                 gleDouble v2[3]) /* input */
  29. {
  30.    INTERSECT (sect, p, n, v1, v2);
  31. }
  32. /* ========================================================== */
  33. /* 
  34.  * The macro and subroutine BISECTING_PLANE compute a normal vecotr that
  35.  * describes the bisecting plane between three points (v1, v2 and v3).  
  36.  * This bisecting plane has the following properties:
  37.  * 1) it contains the point v2
  38.  * 2) the angle it makes with v21 == v2 - v1 is equal to the angle it 
  39.  *    makes with v32 == v3 - v2 
  40.  * 3) it is perpendicular to the plane defined by v1, v2, v3.
  41.  *
  42.  * Having input v1, v2, and v3, it returns a vector n.
  43.  * Note that n is NOT normalized (is NOT of unit length).
  44.  * 
  45.  * The subroutine returns a value indicating if the specified inputs
  46.  * represented a degenerate case. Valid is TRUE if the computed
  47.  * intersection is valid, else it is FALSE.
  48.  */
  49. int bisecting_plane (gleDouble n[3], /* returned */
  50.                       gleDouble v1[3], /* input */
  51.                       gleDouble v2[3], /* input */
  52.                       gleDouble v3[3]) /* input */
  53. {
  54.    int valid;
  55.    BISECTING_PLANE (valid, n, v1, v2, v3);
  56.    return (valid);
  57. }
  58. /* ========================================================== */