home *** CD-ROM | disk | FTP | other *** search
/ Graphics Plus / Graphics Plus.iso / general / modelers / geomview / source.lha / Geomview / src / lib / geometry / hpoint3 / hplane3.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-02-26  |  3.5 KB  |  210 lines

  1. /* Copyright (c) 1992 The Geometry Center; University of Minnesota
  2.    1300 South Second Street;  Minneapolis, MN  55454, USA;
  3.    
  4. This file is part of geomview/OOGL. geomview/OOGL is free software;
  5. you can redistribute it and/or modify it only under the terms given in
  6. the file COPYING, which you should have received along with this file.
  7. This and other related software may be obtained via anonymous ftp from
  8. geom.umn.edu; email: software@geom.umn.edu. */
  9.  
  10. /* Authors: Charlie Gunn, Pat Hanrahan, Stuart Levy, Tamara Munzner, Mark Phillips */
  11.  
  12. #
  13. /*
  14. **    hplane3.c - procedural interface to 3D plane geometry
  15. **
  16. **    pat hanrahan
  17. */
  18.  
  19. #include <math.h>
  20. #include "hg4.h"
  21. #include "hpoint3.h"
  22. #include "hplane3.h"
  23. #include "hline3.h"
  24. #include "transform3.h"
  25. #include "tolerance.h"
  26.  
  27. HPlane3 HPl3Ideal = { 0., 0., 0., 1. };
  28.  
  29. HPlane3 *
  30. HPl3Create()
  31. {
  32.     return (HPlane3 *) Hg4Create();
  33. }
  34.  
  35. void
  36. HPl3Delete( pl )
  37.     HPlane3 *pl;
  38. {
  39.     Hg4Delete( (Hg4Tensor1 *)pl );
  40. }
  41.  
  42. void
  43. HPl3Print( pl )
  44.     HPlane3 *pl;
  45. {
  46.     Hg4Print( (Hg4Tensor1 *)pl );
  47. }
  48.  
  49. void
  50. HPl3Copy( pl1, pl2 )
  51.     HPlane3 *pl1, *pl2;
  52. {
  53.     Hg4Copy( (Hg4Tensor1 *)pl1, (Hg4Tensor1 *)pl2 );
  54. }
  55.  
  56. void
  57. HPl3From( pl, a, b, c, d )
  58.     HPlane3 *pl;
  59.     HPl3Coord a, b, c, d;
  60. {
  61.     Hg4From( (Hg4Tensor1 *)pl, a, b, c, d );
  62. }
  63.  
  64. int
  65. HPl3From3HPt3s( pl, pt1, pt2, pt3 )
  66.     HPlane3 *pl;
  67.     HPoint3 *pt1, *pt2, *pt3;
  68. {
  69.     return Hg4Intersect3( 
  70.     (Hg4Tensor1 *)pt1, (Hg4Tensor1 *)pt2, (Hg4Tensor1 *)pt3,
  71.     (Hg4Tensor1 *)pl, 1 );
  72. }
  73.  
  74. int
  75. HPl3From2HLn3s( pl, ln1, ln2 )
  76.     HPlane3 *pl;
  77.     HLine3 *ln1, *ln2;
  78. {
  79.     HPoint3 pt;
  80.  
  81.     return HLn3IntersectHLn3( ln1, ln2, pl, &pt );
  82. }
  83.  
  84. int
  85. HPl3IntersectHPl3( pl1, pl2, ln )
  86.     HPlane3 *pl1, *pl2;
  87.     HLine3 *ln;
  88. {
  89.     return HLn3From2HPl3s( ln, pl1, pl2 );
  90. }
  91.  
  92. void
  93. HPl3Pencil( t1, pl1, t2, pl2, pl3 )
  94.     HPl3Coord t1, t2;
  95.     HPlane3 *pl1, *pl2, *pl3;
  96. {
  97.     Hg4Pencil( t1, (Hg4Tensor1 *)pl1, t2, (Hg4Tensor2 *)pl2, 
  98.     (Hg4Tensor1 *)pl3 );
  99. }
  100.  
  101. float
  102. HPl3DotHPt3( pl, pt )
  103.     HPlane3 *pl;
  104.     HPoint3 *pt;
  105. {
  106.     return Hg4ContractPiQi( (Hg4Tensor1 *)pl, (Hg4Tensor1 *)pt );
  107. }
  108.  
  109. int
  110. HPl3Undefined( pl )
  111.     HPlane3 *pl;
  112. {
  113.     return Hg4Undefined( (Hg4Tensor1 *)pl );
  114. }
  115.  
  116. int
  117. HPl3Infinity( pl )
  118.     HPlane3 *pl;
  119. {
  120.     return Hg4Infinity( (Hg4Tensor1 *) pl, 1 );
  121. }
  122.  
  123. int
  124. HPl3Compare( pl1, pl2 )
  125.     HPlane3 *pl1, *pl2;
  126. {
  127.     return Hg4Compare( (Hg4Tensor1 *)pl1, (Hg4Tensor1 *)pl2 );
  128. }
  129.  
  130. int
  131. HPl3CoincidentHPt3( pl, pt )
  132.     HPlane3 *pl;
  133.     HPoint3 *pt;
  134. {
  135.     return fzero(HPl3DotHPt3(pl,pt));
  136. }
  137.  
  138. int
  139. HPl3CoincidentHLn3( pl, ln )
  140.     HPlane3 *pl;
  141.     HLine3 *ln;
  142. {
  143.     HPoint3 pt;
  144.  
  145.     return HLn3IntersectHPt3( ln, pl, &pt );
  146. }
  147.  
  148. int
  149. HPl3CoincidentHPl3( pl1, pl2 )
  150.     HPlane3 *pl1, *pl2;
  151. {
  152.     return Hg4Coincident( (Hg4Tensor1 *)pl1, (Hg4Tensor1 *)pl2 );
  153. }
  154.  
  155. void
  156. HPl3Transform( T, pl1, pl2 )
  157.     Transform3 T;
  158.     HPlane3 *pl1, *pl2;
  159. {
  160.     Hg4Transform( T, (Hg4Tensor1 *)pl1, (Hg4Tensor1 *)pl2 );
  161. }
  162.  
  163. void
  164. HPl3TransformN( T, pl1, pl2, n )
  165.     Transform3 T;
  166.     HPlane3 *pl1, *pl2;
  167.     int n;
  168. {
  169.     while( n-- )
  170.     Hg4Transform( T, (Hg4Tensor1 *)pl1++, (Hg4Tensor1 *)pl2++ );
  171. }
  172.  
  173. void
  174. HPl3Dual( pl, pt )
  175.     HPlane3 *pl;
  176.     HPoint3 *pt;
  177. {
  178.     pt->x = pl->a;
  179.     pt->y = pl->b;
  180.     pt->z = pl->c;
  181.     pt->w = pl->d;
  182. }
  183.  
  184. void
  185. HPl3Perp( pl, pt )
  186.     HPlane3 *pl;
  187.     HPoint3 *pt;
  188. {
  189. /*
  190.     HLine3 ln, lndual;
  191.     HQuadric Q;
  192.  
  193.     HLn3From2HPl3s( &ln, pl, &HPl3Ideal );
  194.     HLn3CorrelateHLn3( &ln, Q, &lndual );
  195.     HLn3Perp( &lndual, pt ):
  196. */
  197.     /* if HPl3Ideal == (0,0,0,1) */
  198.     pt->x = pl->a;
  199.     pt->y = pl->b;
  200.     pt->z = pl->c;
  201.     pt->w = 0;
  202. }
  203.  
  204. HPl3Coord
  205. HPl3Angle( pl1, pl2 )
  206.     HPlane3 *pl1, *pl2;
  207. {
  208.     return 0.0;
  209. }
  210.