⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 exthit.h

📁 图形处理算法合集3:包括图形处理、帧缓存技术、渲染、矩阵运算、建模方法
💻 H
字号:
/******************************************************************exthit.hThis is the header file for a C++ class for fast n-dimensional extentoverlap checking. An instance of the class is initialized with acall to the constructor.  ExtHit(size) - where size is the maximum number of extents that  	can be held (and hence tested against each other) in the ExtHit	class instance.There are three other methods in the ExtHit class:  ~ExtHit () - the ExtHit class destructor frees the memory allocated for     the class instance's internal tables, and destroys the class instance.  BOOL add( Extent &extent, Ptr obj ) - This method adds an extent to    the ExtHit class instance. The extent argument is a structure containing	the values for the extent, and the obj argument is a pointer to the	the object for the new extent.  void test (void (*func)(Ptr d, Ptr e1, Ptr e2), Ptr data) - This method    peforms the actual extent overlap checking. The func argument is a	pointer to a function to be called for each pair of objects whose	extents overlap. The data argument allows user specified data to be	passed to func. Func is called with three arguments; the user supplied	data d, and pointers to the overlapping objects (the pointer passed	as the obj argument in the add method).******************************************************************/#ifndef _EXTHIT_H#define _EXTHIT_H#ifndef NULL#define NULL 0#endif#ifndef TRUE#define FALSE 0#define TRUE 1#endif#ifndef MIN#define MIN(a,b) (((a)<(b))?(a):(b))#define MAX(a,b) (((a)>(b))?(a):(b))#endiftypedef void* Ptr;typedef short BOOL;// The number of dimensions to be used in extent checking // This constant should be changed to reflect the number// of dimensions being checked.const int num_dimensions=4;typedef struct tagExtent {  int min [num_dimensions];  int max [num_dimensions];} Extent;typedef struct tagCollideRecord CollideRecord; typedef struct tagMinMaxRecord{ CollideRecord *ptr;		// The parent CollideRecord for this MMR int value;					// The extent dimension value for this MMR} MinMaxRecord;typedef MinMaxRecord *MinMaxRecordPtr;typedef struct tagCollideRecord{  int index;				// The index number of the extent represented   Ptr obj;					// A pointer to the extent's parent geometry  CollideRecord *nextOpen;		// The next element on the open list  CollideRecord *prevOpen;		// The previous element on the open list  CollideRecord *nextActive;	// The next element on the active list  CollideRecord *prevActive;	// The previous element on the active list  MinMaxRecord min [num_dimensions];	// MMR's for the minimum extent values  MinMaxRecord max [num_dimensions];	// MMR's for the maximum extent values  BOOL active;			// Flag specifying CR overlapped with another CR  BOOL open;			// Flag specifying CR is currently on the open list} CollideRecord;/****************************************************************** Definition for the ExtHit class ******************************************************************/class ExtHit{  public:	ExtHit (int size);						// Class constructor	~ExtHit ();								// Class destructor	BOOL add( Extent &extent, Ptr obj );	// Adds an extent to the collideList	void test (void (*func)(Ptr d, Ptr e1, Ptr e2), Ptr data);											// Perform extent overlap testing  private:	int	maxSize;				// Maximum number of extents that can be held	int	numColRecs;				// Number of CollideRecords in the CollideList	int	numOverlaps;			// Number of MMRs in the overlapList	MinMaxRecord **overlapList;	// Extent values for a single dimension	BOOL *overlapTable;			// Table specifying which extents overlapped	CollideRecord *collideList;	// Array holding the extent information	CollideRecord *activeList;	// The head of the list of active extents	void subtest ( int dim, int oLstSize, void (*func)(Ptr d, Ptr p1, Ptr p2),					Ptr data);};int minMaxCompare( const void* rec1, const void* rec2);#endif/****************************************************************** End of exthit.h ******************************************************************/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -