首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何有效地从vertex_handle访问std::list中的顶点的CGAL::Triangulation_3?

如何有效地从vertex_handle访问std::list中的顶点的CGAL::Triangulation_3?
EN

Stack Overflow用户
提问于 2014-05-15 06:46:56
回答 1查看 541关注 0票数 0

我正在研究一种网格生成算法,在这种算法中,我需要在一个称为分段线性复形( PLC )和Delaunay四面体化(DT)( Delaunay三角剖分扩展到3D空间)的结构中维护一个顶点、段和三角形的集合。

根据算法,我经常需要在DT中得到一个顶点的句柄,而在PLC中,我有指向相同顶点(都有相同的x、y、z坐标)的指针。以下是DT的初始化和PLC的结构:

PLC结构:

代码语言:javascript
复制
class vertex
{
    float x;
    float y;
    float z;
    std::list<vertex*> neighbor_vertices;
};

class segment
{
    vertex* endpoints[2];
};

class facet
{
    vertex*vertices[3]; 
};

class PLC
{
    std::list<vertex> vertex_list;
    std::list<segment> segment_list;
    std::list<facet> facet_list;
};

DT的初始化:

代码语言:javascript
复制
typedef CGAL::Exact_predicates_inexact_constructions_kernel K;
typedef CGAL::Triangulation_data_structure_3<> tds;
typedef CGAL::Delaunay_triangulation_3<K,tds> Delaunay;

Delaunay DT; 
PLC input_constraints; 

// Initializing Delaunay tetrahedralization structure
DT.insert(input_constraints.vertex_list.begin(),input_constraints.vertex_list.end());

我的问题是:

对于在vertex_handle中获取DT中对应于input_constraints中的vertex的问题,是否有比以下方法更有效(需要更少的操作)的方法:

  1. 简单地遍历DT的所有顶点,并将它们的x、y、z组件与vertex的x、y、z组件在input_constraints中进行比较。
  2. 维护vertex_handle of DTvertexinput_constraints中的映射。

这个问题可能会成为瓶颈,因为我需要频繁地执行这个操作,而且DTinput_constraints都在算法的不同阶段不断更新。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-15 07:01:41

理想情况下,您应该尽量避免丢失信息,即维护一个list<Vertex_handle>而不是一个list<Vertex *>

不过,有一种方法可以满足你的需要。下面这样的内容可能会奏效:

代码语言:javascript
复制
Vertex * vp; // your vertex pointer
Vertex_handle v = Delaunay::Triangulation_data_structure::Vertex_range::s_iterator_to(*vp);
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23671091

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档