几何算法——介绍

很早之前就想写一些几何算法相关的文章,又是总是因为各种原因一直没有开展,可能是平时懒散拖拉惯了。决定从今天开始,偶尔抽空写一些几何算法的学习笔记,与大家共同学习和探讨。
我也不知道能坚持多久,最终能写下几篇,但是且写且看吧,写一篇算一篇了。——2022.11.19,于上海

介绍

1 关于几何引擎介绍

林雪萍先生写了一篇很精彩的文章,三维cad软件核心技术是什么? 介绍3d几何引擎现状的,很精彩,值得一看。

2 关于模型的表达

CSG和B-rep边界表示法,是实体建模中常用的两种主要表示模式。

2.1 CSG (Constructive Solid Geometry )表示

在CSG表示中,固体被表示为原始固体物体的集合理论Boolean表达式,结构更简单。
优点:方法简洁,生成速度快,处理方便,无冗余信息,而且能够详细地记录构成实体的原始特征参数,甚至在必要时可修改体素参数或附加体素进行重新拼合。数据结构比较简单,数据量较小,修改比较容易,而且可以方便地转换成边界(Brep)表示。
局限:由于信息简单,这种数据结构无法存贮物体最终的详细信息,例如边界、顶点的信息等。由于CSG表示受体素的种类和对体素操作的种类的限制,使得它表示形体的覆盖域有较大的局限性,而且对形体的局部操作(例如,倒角等)不易实现,显示CSG表示的结果形体时需要的间也比较长。

2.2 Brep (Boundary Representation)表示

边界表示法(B-rep)只将实体的有向曲面描述为由顶点、边和面组成的数据结构。
优点:
1. 有较多的关于面、边、点及其相互关系的信息。
2. 有利于生成和绘制线框图、投影图,有利于计算几何特性,易于同二维绘图软件衔接和同曲面建模软件相关联。
局限:
对几何物体的整体描述能力相对较差,无法提供关于实体生成过程的历史信息,也无法记录组成几何体的基本体素的元素的原始数据,同时描述物体所需信息量较多,边界表达法的表达形式不唯一

3 关于翼边结构和半边结构

3.1 翼边结构

翼边结构于70年代由Standford大学的B.G. Baumgart 作为多面体的边界表示法提出,最早用于从图象重建三维物体中。
在这里插入图片描述

3.2 半边结构

半边数据结构是翼边数据结构的变形,主要出发点是要改进翼边数据结构,使其在边的数据结构的构造和使用方面更加高效。已成为主流边界表示数据结构。
在这里插入图片描述

4 关于边界表示法

B-rep
在这里插入图片描述

4.1 ACIS中的Brep表示

在这里插入图片描述
BODY:
最高层次的拓扑元素。
1、可以由一系列分离体组成(LUMP 链表),如图,正方体减去一个圆柱体后得到的物体由四个 LUMP组成。
在这里插入图片描述

2、 可以表示一个二维区域(sheet, 具体的 sheet 可以是开的)。
3、可以表示线框(称 wire body,由 wire 的链表表示。线框可以是点、折线段(开、闭)和整个物体的线框模型)。
4、 LUMP 和WIRE 两者只有其一。

LUMP:
表示连通体或连通的二维区域。具体由多个 SHELL 链表示,可以是多个SHELL。
SHELL:表示LUMP 的一个连通边界,可以是二维的,也可以是一维的。具体由一系列的FACEs 组成,或由一系列 WIREs 组成。面链的尾巴是 NULL。
NOTE:
1、SHELL 中的 FACE 指针与WIRE指针,总有一个为NULL。即表明其不能同时表示实体和线框,原因是 coedge 无法兼顾这两者。
2、SHELL 可以是开的,可以是闭的。
3、SHELL 可以是complete 和incomplete。
4、包含incomplete shell的BODY可能仅仅以其定义的边界区域(而不是一个体)参加造型操作,甚至某些情况就不允许参加操作,因此仍会有二义性。

SUBSHELL:
ACIS 将 SHELL 分解成层次结构的SUBSHELLs 表示,用以提高操作效率。由于该表示仅供系统内部使用。

FACE:
表示一张几何曲面的一部分(应为连通区域)。具体由一系列 LOOPs 表示,当 LOOP=NULL 时,表示整张曲面,可以是无界曲面。(LOOP 链的尾巴是 NULL)。
sense: 表示 Face 的法向与 Surface 的法向相同还是相反。FORWORD 表示同向,REVERSE 表示反向。
sides: 表示 Face 为 single sided or double sided。单边面表示面的一边属于体内,另一边属于体外;双边面表示或两边同时属于体内,或同时不属于体内
cont: 表示双边面是both-inside,或both-outside。前者表示体内面,后者表示二维区域。
NOTE:
1、当 FACE的 LOOP 指针为NULL 时,FACE 仅含有几何信息SURFACE,而不再有拓扑信息,从而等价于曲面模型,此时许多实体造型操作将不能作用在FACE上。
2、由于引入了sides 和cont,从而使得: 1. sheet 仅需要一个面表示,而以前均需用两个面表示(不合理,既浪费空间,又会造成操作不可靠)。2. 能够表示体内面。

LOOP:
表示FACE 的一个连通的边界。具体表示为一个COEDGE链。链可开、可闭,故遍历时的结束条件(等于 NULL 或等于 start edge)。
在 FACE 的所有环中,部分内环,外环,因对某些曲面合适,如圆柱。
对开的 LOOP,开端可以是有限的,也可以是无限的。如果有一端是有限的,则不完备,如有一端是无限的,则为无限面。

COEDGE:
表示边在面中的引用,仅与一个面相关。COEDGE 为双向链表。
COEDGE 的 partner(partner_ptr)以逆时针方向构成一个循环链,表示同一 EDGE的所有 COEDGE
Sense: 相对于EDGE的方向,FORWARD共向,REVERSE反向
Pcurve: 指向EDGE在COEDGE所属面的参数域上的曲线。
Start()、end()返回 COEDGE 的起点、末点,已考虑了 sense。

EDGE:
表示一条曲线上的一部分(可以是有界,也可以是无界)。
具体由一个 curve 指针和两个端点指针表示。端点指针可以是NULL,端点为 NULL 表示边在那端不受到限制。如果曲线在那端是无限的,则EDGE 在那端也是无限的。如果边和曲线是封闭的,则或者两端点全部为NULL,或者两端点指向同一点。
曲线指针可以为 NULL,此时必须两端点指向同一个 VERTEX,用以表示孤立点。如圆锥的顶点。
sense: 相对于curve 的方向,FORWARD 为同向,REVERSE 为反向。

VERTEX:
除有几何点指针外,包含与其相邻的一条边的指针,指针可以为空,此时表明该顶点包含一个vertex ATTRIB,其中包含多条边指针,每一条边属于该点的一个不同的伞。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
计算几何算法是指用于解决与几何相关的问题的一系列数学算法。它涵盖了几何图形的构造、变换、相交、碰撞检测、射线追踪等方面。计算几何算法的实现通常需要在计算机程序中编写相关的代码。 实现计算几何算法通常可以通过编写程序来实现。自定义计算几何算法的实现过程可能会涉及到各种数学运算、数据结构和算法设计。常见的计算几何算法实现包括点的距离计算、线段的相交检测、多边形的包围盒计算等。 实现计算几何算法的过程中,我们通常会使用到数学中的向量、矩阵、多边形等概念。另外,我们还会用到很多常见的数学公式和算法,如直线方程、圆方程、向量的内积和叉积等等。这些数学知识的运用和实现是实现计算几何算法的基础。 编写计算几何算法的代码时,我们可以使用各种编程语言,如C++、Python、Java等。在代码中,我们需要定义适当的数据结构来存储几何图形的信息,如点、线段、多边形等。同时,我们也需要实现各种相应的算法函数来进行计算和处理。 对于大型项目或需要高效计算的情况,我们可能需要使用更高效的算法和数据结构,如凸包算法、平面分割树等。这些算法和数据结构的选择会影响到计算几何算法的实现效率和效果。 总之,计算几何算法与实现的pdf主要是介绍了计算几何算法的概念和实现的基本过程。通过学习和掌握计算几何算法,我们可以更好地处理与几何相关的问题,并能够应用到各种领域,如计算机图形学、计算机辅助设计等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值