home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 21 / CD_ASCQ_21_040595.iso / dos / graphic / font3d11 / f3d_src / geometry.h < prev    next >
C/C++ Source or Header  |  1994-10-12  |  3KB  |  111 lines

  1. //=================================================================================================
  2. //   Geometry.H
  3. //
  4. //   Copyright (c) 1994 by Todd A. Prater
  5. //   All rights reserved.
  6. //
  7. //=================================================================================================
  8.  
  9. #ifndef __Geometry_H__
  10. #define __Geometry_H__
  11.  
  12.    #include <iostream.h>
  13.    #include "Config.H"
  14.    #include "Vector.H"
  15.    #include "List.H"
  16.  
  17.  
  18.    #define MIN_SHRINK_ANGLE 0.15
  19.  
  20.  
  21.    //---------------------------------------------------------------------------
  22.    //    TRIANGLE
  23.    //---------------------------------------------------------------------------
  24.  
  25.    class TRIANGLE
  26.    {
  27.       public:  VECTOR v1,v2,v3;
  28.                VECTOR n1,n2,n3;
  29.  
  30.                TRIANGLE(void);
  31.                TRIANGLE(VECTOR _v1, VECTOR _v2, VECTOR _v3);
  32.                TRIANGLE(VECTOR _v1, VECTOR _v2, VECTOR _v3,
  33.                         VECTOR _n1, VECTOR _n2, VECTOR _n3);
  34.                TRIANGLE(TRIANGLE& t);
  35.  
  36.                VECTOR Normal(void) { return ~((v3-v1)^(v2-v1)); }
  37.  
  38.                void Output(ostream& s, ULONG format);
  39.  
  40.                BYTE    Orientation(void)
  41.                {
  42.                   if (((v2.x-v1.x)*(v3.y-v1.y)
  43.                       -(v3.x-v1.x)*(v2.y-v1.y)) >= 0.0)
  44.                      return COUNTER_CLOCKWISE;
  45.                   else
  46.                      return CLOCKWISE;
  47.                }
  48.    };
  49.  
  50.  
  51.    inline TRIANGLE::TRIANGLE(void)
  52.    {
  53.    }
  54.  
  55.    inline TRIANGLE::TRIANGLE(VECTOR _v1, VECTOR _v2, VECTOR _v3)
  56.    {
  57.       v1=_v1; v2=_v2; v3=_v3;
  58.    }
  59.  
  60.    inline TRIANGLE::TRIANGLE(VECTOR _v1, VECTOR _v2, VECTOR _v3,
  61.                              VECTOR _n1, VECTOR _n2, VECTOR _n3)
  62.    {
  63.       v1=_v1; v2=_v2; v3=_v3;
  64.       n1=_n1; n2=_n2; n3=_n3;
  65.    }
  66.  
  67.    inline TRIANGLE::TRIANGLE(TRIANGLE& t)
  68.    {
  69.       v1=t.v1; v2=t.v2; v3=t.v3;
  70.    }
  71.  
  72.    ostream& operator << (ostream& s, const TRIANGLE& t);
  73.  
  74.  
  75.  
  76.  
  77.    class POLYGON
  78.    {
  79.        public:
  80.            int              numpoints;
  81.            VECTOR*          pointlist;
  82.            ORIENTATIONTYPE  orientation;
  83.  
  84.            ORIENTATIONTYPE  findOrientation(void);
  85.            ORIENTATIONTYPE  findDeterminant(INT p1, INT p2, INT p3);
  86.            BOOLEAN          noneInside(INT p1, INT p2, INT p3, INT n, INT* vlist);
  87.  
  88.  
  89.  
  90.            POLYGON(void);
  91.            POLYGON(INT n, VECTOR* p);
  92.            POLYGON(POLYGON& P);
  93.  
  94.            INT NumPoints(void) { return numpoints; }
  95.            INT Triangulate(LIST<TRIANGLE>& trianglelist);
  96.            int Encloses(POLYGON& p);
  97.            int isInside(POLYGON& p);
  98.            void Combine(POLYGON& p);
  99.            void Shrink(POLYGON& p, DOUBLE shrinkFactor);
  100.            void SetDepth(DOUBLE d);
  101.  
  102.    };
  103.  
  104.    ostream& operator << (ostream& s, const POLYGON& p);
  105.  
  106.    VECTOR ApproximateQuadraticSpline(VECTOR cp1, VECTOR cp2, VECTOR cp3, DOUBLE t);
  107.  
  108.  
  109. #endif
  110.  
  111.