Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 良好的三角网格数据结构_C#_Data Structures_3d_Mesh - Fatal编程技术网

C# 良好的三角网格数据结构

C# 良好的三角网格数据结构,c#,data-structures,3d,mesh,C#,Data Structures,3d,Mesh,我正在寻找一个内存效率高,但方便的数据结构的三维网格或面集组成的三角形 目前我使用的是这种“经典”结构: 点列表和三角形列表 每个点都有一个X、Y和Z值 每个三角形有三个索引i0、i1、i2,它们表示点列表中的一个点 这是我能想到的最紧凑的布局。它是完美的,如果我想做的是绘制网格,而不是修改或过滤它。 但是,它确实会使大多数修改网格或生成新局部网格的操作非常繁琐,例如: 删除三角形效率很低 仅使用具有少于3个邻居的三角形生成新网格 查找和删除给定边界框中具有一个或所有点的所有三角形 查找具

我正在寻找一个内存效率高,但方便的数据结构的三维网格或面集组成的三角形

目前我使用的是这种“经典”结构:

  • 点列表和三角形列表
  • 每个点都有一个X、Y和Z值
  • 每个三角形有三个索引i0、i1、i2,它们表示点列表中的一个点
这是我能想到的最紧凑的布局。它是完美的,如果我想做的是绘制网格,而不是修改或过滤它。 但是,它确实会使大多数修改网格或生成新局部网格的操作非常繁琐,例如:

  • 删除三角形效率很低
  • 仅使用具有少于3个邻居的三角形生成新网格
  • 查找和删除给定边界框中具有一个或所有点的所有三角形
  • 查找具有特定角度的所有边
  • 删除短于特定长度的所有边
基本上,任何需要修改网格、对边进行迭代或查找相邻面/边的操作都需要生成并丢弃几个临时字典和哈希集。没有简单的方法可以迭代单个面的点或边,或者迭代单个点周围的边/面。删除点意味着将其从每个三角形中删除,然后更改所有三角形中所有其他点的索引值,等等

是否有一个规范的数据结构没有这些缺点,但内存效率高


我不是在寻找一个完整的库,而是一个我可以自己实现的结构(尽管了解特定库是如何解决这个问题的可能很有趣)

有几个开源数据结构可以满足您的需要:

  • CGAL
  • OpenMesh
  • 曲面网格
  • 我已经把它们从较难的部分改为较易使用的部分。他们都是


    看看比勒费尔德大学(Surface mesh的开发者),我认为这是一个很好的起点

    在内存和磁盘三角网格的数据结构方面,已经发表了很多工作。我认为你最好咨询一下你最喜欢的搜索引擎,至少一开始是这样。你可能比从“谢谢”开始做得更糟,我试着先搜索,但显然不是很成功。我没想到会在维基百科上找到如此深入的文章;该页面还提供了一些优秀的搜索术语:面顶点网格、翼边网格、半边网格、四边形网格、角表、顶点网格