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

📄 quadedge.h

📁 [Game.Programming].Academic - Graphics Gems (6 books source code)
💻 H
字号:
#ifndef QUADEDGE_H#define QUADEDGE_H#include <geom2d.h>class QuadEdge;class Edge {	friend QuadEdge;	friend void Splice(Edge*, Edge*);  private:	int num;	Edge *next;	Point2d *data;  public:	Edge()			{ data = 0; }	Edge* Rot();	Edge* invRot();	Edge* Sym();	Edge* Onext();	Edge* Oprev();	Edge* Dnext();	Edge* Dprev();	Edge* Lnext();	Edge* Lprev();	Edge* Rnext();	Edge* Rprev();	Point2d* Org();	Point2d* Dest();	const Point2d& Org2d() const;	const Point2d& Dest2d() const;	void  EndPoints(Point2d*, Point2d*);	QuadEdge* Qedge()	{ return (QuadEdge *)(this - num); }	void Draw(unsigned int);};class QuadEdge {	friend Edge *MakeEdge();  private:	Edge e[4];	unsigned int ts;  public:	QuadEdge();	int TimeStamp(unsigned int);};class Subdivision {  private:	Edge *startingEdge;	Edge *Locate(const Point2d&);  public:	Subdivision(const Point2d&, const Point2d&, const Point2d&);	void InsertSite(const Point2d&);	void Draw();};inline QuadEdge::QuadEdge(){	e[0].num = 0, e[1].num = 1, e[2].num = 2, e[3].num = 3;	e[0].next = &(e[0]); e[1].next = &(e[3]);	e[2].next = &(e[2]); e[3].next = &(e[1]);	ts = 0;}inline int QuadEdge::TimeStamp(unsigned int stamp){	if (ts != stamp) {		ts = stamp;		return TRUE;	} else		return FALSE;}/************************* Edge Algebra *************************************/inline Edge* Edge::Rot()// Return the dual of the current edge, directed from its right to its left.{	return (num < 3) ? this + 1 : this - 3;}inline Edge* Edge::invRot()// Return the dual of the current edge, directed from its left to its right.{	return (num > 0) ? this - 1 : this + 3;}inline Edge* Edge::Sym()// Return the edge from the destination to the origin of the current edge.{	return (num < 2) ? this + 2 : this - 2;}inline Edge* Edge::Onext()// Return the next ccw edge around (from) the origin of the current edge.{	return next;}inline Edge* Edge::Oprev()// Return the next cw edge around (from) the origin of the current edge.{	return Rot()->Onext()->Rot();}inline Edge* Edge::Dnext()// Return the next ccw edge around (into) the destination of the current edge.{	return Sym()->Onext()->Sym();}inline Edge* Edge::Dprev()// Return the next cw edge around (into) the destination of the current edge.{	return invRot()->Onext()->invRot();}inline Edge* Edge::Lnext()// Return the ccw edge around the left face following the current edge.{	return invRot()->Onext()->Rot();}inline Edge* Edge::Lprev()// Return the ccw edge around the left face before the current edge.{	return Onext()->Sym();}inline Edge* Edge::Rnext()// Return the edge around the right face ccw following the current edge.{	return Rot()->Onext()->invRot();}inline Edge* Edge::Rprev()// Return the edge around the right face ccw before the current edge.{	return Sym()->Onext();}/************** Access to data pointers *************************************/inline Point2d* Edge::Org(){	return data;}inline Point2d* Edge::Dest(){	return Sym()->data;}inline const Point2d& Edge::Org2d() const{	return *data;}inline const Point2d& Edge::Dest2d() const{	return (num < 2) ? *((this + 2)->data) : *((this - 2)->data);}inline void Edge::EndPoints(Point2d* or, Point2d* de){	data = or;	Sym()->data = de;}#endif /* QUADEDGE_H */

⌨️ 快捷键说明

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