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 >
Wrap
C/C++ Source or Header
|
1994-10-12
|
3KB
|
111 lines
//=================================================================================================
// Geometry.H
//
// Copyright (c) 1994 by Todd A. Prater
// All rights reserved.
//
//=================================================================================================
#ifndef __Geometry_H__
#define __Geometry_H__
#include <iostream.h>
#include "Config.H"
#include "Vector.H"
#include "List.H"
#define MIN_SHRINK_ANGLE 0.15
//---------------------------------------------------------------------------
// TRIANGLE
//---------------------------------------------------------------------------
class TRIANGLE
{
public: VECTOR v1,v2,v3;
VECTOR n1,n2,n3;
TRIANGLE(void);
TRIANGLE(VECTOR _v1, VECTOR _v2, VECTOR _v3);
TRIANGLE(VECTOR _v1, VECTOR _v2, VECTOR _v3,
VECTOR _n1, VECTOR _n2, VECTOR _n3);
TRIANGLE(TRIANGLE& t);
VECTOR Normal(void) { return ~((v3-v1)^(v2-v1)); }
void Output(ostream& s, ULONG format);
BYTE Orientation(void)
{
if (((v2.x-v1.x)*(v3.y-v1.y)
-(v3.x-v1.x)*(v2.y-v1.y)) >= 0.0)
return COUNTER_CLOCKWISE;
else
return CLOCKWISE;
}
};
inline TRIANGLE::TRIANGLE(void)
{
}
inline TRIANGLE::TRIANGLE(VECTOR _v1, VECTOR _v2, VECTOR _v3)
{
v1=_v1; v2=_v2; v3=_v3;
}
inline TRIANGLE::TRIANGLE(VECTOR _v1, VECTOR _v2, VECTOR _v3,
VECTOR _n1, VECTOR _n2, VECTOR _n3)
{
v1=_v1; v2=_v2; v3=_v3;
n1=_n1; n2=_n2; n3=_n3;
}
inline TRIANGLE::TRIANGLE(TRIANGLE& t)
{
v1=t.v1; v2=t.v2; v3=t.v3;
}
ostream& operator << (ostream& s, const TRIANGLE& t);
class POLYGON
{
public:
int numpoints;
VECTOR* pointlist;
ORIENTATIONTYPE orientation;
ORIENTATIONTYPE findOrientation(void);
ORIENTATIONTYPE findDeterminant(INT p1, INT p2, INT p3);
BOOLEAN noneInside(INT p1, INT p2, INT p3, INT n, INT* vlist);
POLYGON(void);
POLYGON(INT n, VECTOR* p);
POLYGON(POLYGON& P);
INT NumPoints(void) { return numpoints; }
INT Triangulate(LIST<TRIANGLE>& trianglelist);
int Encloses(POLYGON& p);
int isInside(POLYGON& p);
void Combine(POLYGON& p);
void Shrink(POLYGON& p, DOUBLE shrinkFactor);
void SetDepth(DOUBLE d);
};
ostream& operator << (ostream& s, const POLYGON& p);
VECTOR ApproximateQuadraticSpline(VECTOR cp1, VECTOR cp2, VECTOR cp3, DOUBLE t);
#endif