三角网格的半边数据结构

背景:

顶点-面列表,无法快速查询“边-点-面”间的相邻关系,如:判断两个顶点是否相连(需要遍历面列表,逐一查找)

为此,我们用更加复杂的数据结构,来额外存储这种相邻关系 (即面、顶点和边的邻接信息),使得相关的查询更高效  

于是,半边数据结构被发明出来了~

参考资料:半边数据结构讲解-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. 求与橘色点相连的所有边

  • 8
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值