📄 dtin.h
字号:
#ifndef DTIN_H
#define DTIN_H
#include <vector>
using namespace std;
class DiscretePoint
{
public:
float x;
float y;
float z;
int index;
DiscretePoint(float xx=0.0f,float yy=0.0f):x(xx),y(yy){}
DiscretePoint(float xx,float yy,int i):x(xx),y(yy),index(i){}
};
class EdgeID
{
public:
int start;
int end;
EdgeID(){}
EdgeID(int s,int e):start(s),end(e){}
bool operator<(const EdgeID& e)const
{
return (start < e.start) || ((start == e.start) && (end < e.end));
}
bool operator>(const EdgeID& e)const
{
return (start > e.start) || ((start == e.start) && (end > e.end));
}
bool operator==(const EdgeID& e)const
{
return (start == e.start) && (end == e.end);
}
};
class Edge:public EdgeID
{
public:
int LeftTriangle;// 边的左三角形索引
int RightTriangle;// 边的右三角形索引
int index;
Edge(){}
Edge(int s,int e):EdgeID(s,e){}
};
class TempEdge:public EdgeID
{
public:
bool m_bComfirmed;
vector<int> m_vertex;
TempEdge(){}
TempEdge(int s,int e):EdgeID(s,e),m_bComfirmed(false){}
};
class Triangle
{
public:
int Node[3];// 三角形的顶点的坐标索引
vector<int> _Edge;
int AdjTriangle[3];// 三角形的顶点的对边相邻的三角形
int index;// 三角形的索引
};
class _Polygon
{
public:
vector<DiscretePoint> m_vertex;
};
class DTriangular
{
public:
vector<DiscretePoint> m_point;
vector<DiscretePoint> m_convex;
vector<Edge> m_edge;
vector<Triangle> m_triangle;
vector<DiscretePoint> m_center;
vector<float> m_radius;
void Convex();
void ConvexTriangular();
void InsertPoint(const DiscretePoint&);
void InsertAllPoints();
void Index();
void Draw(CDC*);
bool LButtonDown(long x,long y);
bool RButtonDown(long x,long y);
bool MouseMove(long x,long y);
};
void Voronoi(vector<_Polygon>&,DTriangular&);
void Draw(CDC*,const vector<_Polygon>&);
//=================================================================
// 设 m = 凸包中点的个数,n = 内部点的个数
// 则:边数 = 3 + (m - 3) * 2 + n * 3;
// 三角形的个数 = (m - 2) + n * 2;
//=================================================================
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -