半边表是一种比较流行的数据结构,它以指针的形式保存网格的拓扑关系。
图1是半边表的是个例子。半边表是由顶点,半边以及面组成。顶点表示网格中的实际点,在图中用黄点表示。其中半边可视为一条有向边,封闭的网格中的一条边由2条方向相反的半边组成,在图中用蓝色有向边表示。整个网格的邻接关系主要靠半边间的关系来表示。对于每条半边,用next指针来记录同个面上的下一条边,图中表示为顺时针方向的下一条边;用pair指针来记录相邻面的相邻关系,这样一条实际边上的2条半边互为pair关系,图中紫色箭头表示了pair指针。表示了邻接关系后,每条半边再记录它的起始点以及所在的面,每个点记录它射出的半边,每个面记录属于它的任意一条半边,我们就可以完全记录网格的结构并对它进行操作了。
半边表3种结构表示如下:
struct HE_edge
{
HE_vert* vert; //该边的起始点指针
HE_edge* pair; //该边的相对半边指针
HE_face* face; //该边所在的面指针
HE_edge* next;//该边所在面顺时针方向的下一条半边的指针
};
struct HE_vert
{
float x;
float y;
float z;
HE_edge* edge; //以该点为起始点的半边的指针
}
struct HE_face
{
HE_edge* edge; //该面中任意一条半边的指针
}