当前位置: 首页 > 编程笔记 >

在数据结构中将B-Rep转换为树

裴楚青
2023-03-14
本文向大家介绍在数据结构中将B-Rep转换为树,包括了在数据结构中将B-Rep转换为树的使用技巧和注意事项,需要的朋友参考一下

1 B-rep流

明确指出要建立一个生产程序,将由某种标准多边形格式(例如,波前或java3D obj文件)在外部定义的B-rep导入到我们的几何管道的输入流中。多边形和法线提供的边界表示必须一致地定向。对于主要在计算机图形学中实现的一般归档的几何模型,可能需要过滤输入文件以应对非平面多边形和其他几何误差。然后,通过以下描述的算法步骤,将相干定向的三角形的输出流转换为我们的双渐进式BSP(二进制搜索分区)树。

2 B-rep到BSP算法概述

我们方法的基本过程是通过收缩每个三角形的预先计算出的惯性来计算三角形子集的惯性,并对三角形子集的惯性进行本征分解,以最优地和递归地约束其形状。

在d维情况下,对于Euler矩阵的每个d个特征向量,实施2个极值正切超平面可获得形状限制。对应的2d超空间的交集创建了当前单元格中包含的边界子集的最佳拟合(超)平行六面体。在3Dimension中,有6 = 2×3这样的平面。

初始化

  • 首先计算每个输入三角形的仿射扩展的欧拉张量(线性时间)。

  • 整个输入三角形集与BSP根相连。

  • 整个E3空间(凸面)都连接到根。

  • 根标签设置为FUZZY。

递归案例

  • 当前的FUZZY像元最多被垂直于当前三角形子集的Euler张量的矩阵表示的特征向量垂直的6个正交超平面划分。

  • 通过在当前三角形子集的顶点v上评估的线性函数w = a•v的最小值和最大值计算这些平面,其中a表示当前特征向量。

  • 在每个特征向量的情况下,最多由两个最大-最小平行超平面产生三个凸单元,它们是{OUT,FUZZY,IN}或{OUT,FUZZY,OUT}。

  • 每个FUZZY像元进一步被与最大特征向量相关的主超平面划分。

  • 较小的三角形子集通过其顶点的包含测试与每个分割的单元相连。

  • 穿过分割平面的三角形被分割,并且(子)三角形被连接到节点子树。

基本情况

当当前像元仅由少量边界三角形组成时,基于递归惯性的除法将停止。执行最终的单元划分,以实现边界三角形的平面。

 类似资料:
  • 问题内容: 假设我有一个结构: 与数据库表具有相同的架构。将数据库行解析为结构的最简单方法是什么?我在下面添加了一个答案,但是我不确定这是最好的答案。 问题答案: 这是一种实现方法-只需在函数中手动分配所有结构值即可。

  • 问题内容: 我想将一个结构转换为Golang中的地图。如果我可以在创建的地图中使用JSON标签作为键(否则默认为字段名称),那也将很好。 编码愉快!:) 原始帖子 到目前为止,我具有此功能,我正在使用反射包,但我不太了解如何使用该包,请多多包涵。 我也查看了JSON包的源代码,因为它应该包含我所需的实现(或部分实现),但理解得并不多。 问题答案: 我也需要这样的东西。我正在使用将结构转换为地图的内

  • 问题内容: 我正在尝试使用该包将Go结构转换为JSON,但我得到的只是。我敢肯定这是完全显而易见的,但我看不到。 然后,当我尝试运行它时,我得到以下信息: 问题答案: 您需要导出的字段,以便在包装可以看到它。将字段重命名为。 输出:

  • 问题内容: 我试图在Go中创建一个通用方法,该方法将填充来自的使用数据。例如,方法签名和用法可能类似于: 我知道可以使用JSON作为中介来完成;还有另一种更有效的方法吗? 问题答案: 最简单的方法是使用https://github.com/mitchellh/mapstructure 如果您想自己做,则可以执行以下操作: http://play.golang.org/p/tN8mxT_V9h

  • 问题内容: 有没有一种方法可以将Swift结构的地址转换为无效的UnsafeMutablePointer? 我尝试了一下但没有成功: 谢谢! 编辑: 我实际上正在尝试 将上下文 移植到Swift中 学习CoreAudio 的第一个示例。 这是我到目前为止所做的: 我正在努力留在Swift中,但是如果事实证明这是一个问题而不是优势,那么我最终将链接到C函数。 编辑:底线 如果您因为试图在Swift中

  • 我试图在Go中创建一个泛型方法,该方法将使用来自< code > map[string]interface { } 的数据填充< code>struct。例如,方法签名和用法可能如下所示: 我知道使用JSON作为中介可以做到这一点;有没有其他更有效的方法?