背景:
顶点-面列表,无法快速查询“边-点-面”间的相邻关系,如:判断两个顶点是否相连(需要遍历面列表,逐一查找)
为此,我们用更加复杂的数据结构,来额外存储这种相邻关系 (即面、顶点和边的邻接信息),使得相关的查询更高效
于是,半边数据结构被发明出来了~
参考资料:半边数据结构讲解-CSDN博客
结构:
以“半边”为基本单位,HE_edge
struct HE_edge
{
HE_vert* vert; // vertex at the end of the half-edge 当前半边指向的顶点
HE_edge* pair; // oppositely oriented adjacent half-edge 当前半边的“孪生半边”
HE_face* face; // face the half-edge borders 当前半边相邻的面
HE_edge* next; // next half-edge around the face 下一条半边
};
其中 HE_vert 与 HE_face
struct HE_vert
{
float x;
float y;
float z;
HE_edge* edge; // one of the half-edges emantating from the vertex
// 从该顶点出发的半边
};
struct HE_face
{
HE_edge* edge; // one of the half-edges bordering the face
// 围成该面的,任意一条半边
};
应用:
1. 求与橘色点相连的所有边