几何算法——介绍

news2024/11/23 3:13:04

几何算法——介绍

  • 介绍
    • 1 关于几何引擎介绍
    • 2 关于模型的表达
      • 2.1 CSG (Constructive Solid Geometry )表示
      • 2.2 Brep (Boundary Representation)表示
    • 3 关于翼边结构和半边结构
      • 3.1 翼边结构
      • 3.2 半边结构
    • 4 关于边界表示法
      • 4.1 ACIS中的Brep表示

很早之前就想写一些几何算法相关的文章,又是总是因为各种原因一直没有开展,可能是平时懒散拖拉惯了。决定从今天开始,偶尔抽空写一些几何算法的学习笔记,与大家共同学习和探讨。
我也不知道能坚持多久,最终能写下几篇,但是且写且看吧,写一篇算一篇了。——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,其中包含多条边指针,每一条边属于该点的一个不同的伞。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/20622.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一汽大众迈腾车前悬架系统设计

目 录 摘要 I Abstract II 第一章 绪论 1 1.1选题背景及意义 1 1.2国内外的研究现状 1 1.3本文的主要研究内容 3 第二章 悬架的结构分析与整体参数设计 4 2.1悬架系统的简介与分类 4 2.1.1悬架系统的简介 4 2.1.2悬架系统的分类 5 2.2独立悬架的特点 5 2.3整体参数的设计 6 2.3…

VM Tools安装过程

系列文章目录 VM Tools安装过程 VM Tools安装过程系列文章目录一、VM Tools安装步骤二、安装后无法使用问题解决办法之一一、VM Tools安装步骤 此时系统会弹出装载虚拟CD驱动器 点击打开文件 打开文件后可将 文件夹里的文件全部复制到自己的某个文件夹中,比如桌面 注…

延误件如何筛选 物流查询分享查询方法筛选延误三天以上物流件

当你拥有大量快递单号需要查询时,如何快速查询出每个单号的物流信息呢?分析物流更新是否及时,有没有延误,今天小编给大家分享一款软件批量查询物流,并且筛选出延误件,一起来看看吧! 第一步&…

Linux进阶-编辑器

常用两个编辑器 gedit编辑器:依赖图形界面。 vi/vim编辑器:sudo apt install vim(安装vim编辑器) vim与vi的区别: vim是vi的升级版本,兼容vi; vi按u只能撤销上次命令,而在vim里…

QT之OpenGL摄像机

QT之OpenGL摄像机1. 概述1.1 摄像机创建2. 旋转(欧拉角)3. demo示例4. 参考1. 概述 OpenGL本身没有摄像机(Camera)的概念,但我们可以通过把场景中的所有物体往相反方向移动的方式来模拟出摄像机,产生一种我们在移动的感觉。 当我们讨论摄像机/观察空间…

OpenCV图像处理——(实战)信用卡识别

总目录 图像处理总目录←点击这里 十四、信用卡数字识别 识别的图片模板图片 14.1、模板图片处理 读入图片->灰度图->二值图->计算轮廓->存储每一个模板 如果是所需模板匹配只有一个,课直接读入灰度图像即可 这里有10个模板(0-9),所以需…

学校教务管理系统的设计与实现--Word文档可在最后链接处下载,无code

一 设计背景 1.1 课题现状 国家经济水平逐渐的提升,各行各业发展也稳步向前,其业务也繁多起来。慢慢的对其管理需求也要求提高,因此很多行业临着新的困难和机遇,现如今要怎么利用利于对自身发展需要的而且适用的种种技术来提升自身…

【PID优化】基于正余弦算法 (SCA)优化PID实现微型机器人系统位置控制附simulink模型和matlab代码

​✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。 🍎个人主页:Matlab科研工作室 🍊个人信条:格物致知。 更多Matlab仿真内容点击👇 智能优化算法…

CMake中math的使用

CMake中的math用于评估数学表达式&#xff0c;其格式如下&#xff1a; math(EXPR <variable> "<expression>" [OUTPUT_FORMAT <format>]) 计算数学<expression>并将<variable>设置为结果值。expression的结果必须可以表示为64位有符号…

用python gdal裁剪栅格数据提取添加xy经纬度和栅格值

用python gdal裁剪栅格数据提取添加xy经纬度和栅格值 问题&#xff1a;把遥感影像转为一张表。 现有一全球经济作物数据alfalfa的产量。 alfalfa是一种亚洲西南部多年生草本植物&#xff0c;是重要的经济作物。在图中也可以看到&#xff0c;主要分布在热带和南美洲。 我们想把…

Android PackageManager 基本使用

Android系统为我们提供了很多服务管理类&#xff0c;PackageManager管理类&#xff0c;它的主要职责是管理应用程序包。 通过PackageManager获取的应用程序信息来自AndroidManifest.xml。 AndroidManifest.xml是Android应用程序中最重要的文件之一&#xff0c;它是Android程序…

java语法复习:注解

目录 一.注解概念 二.常用注解(1) Override: 限定某个函数必须重载其他函数&#xff0c;该注解只能用于函数(2) Deprecated&#xff1a;用于表示某个程序元素&#xff08;类、函数&#xff09;已过时(3) SuppressWarnings&#xff1a;抑制编译器警告 三.元注解 一.注解概念 …

山东大学线性代数-2-行列式

目录 2.2 n阶行列式 2.2.1 代数余子式和余子式 2.2.2 n阶行列式的定义 2.3 特殊行列式的计算 2.3.1 对角行列式 2.3.2 三角行列式 2.3.3 斜三角行列式 2.3.4 其他特殊行列式 2.4 行列式的性质 2.4.1 性质1 2.4.2 性质2 2.4.3 性质3 2.4.4 性质4 2.4.5 性质5 2.5 行列…

【笔试题】【day25】

文章目录第一题&#xff08;缺页中断&#xff09;第二题&#xff08;多线程&#xff09;第三题&#xff08;系统死锁的原因&#xff09;第四题&#xff08;大小端在内存中的存储方式&#xff09;第五题&#xff08;处理器运行时间计算&#xff09;第六题&#xff08;计算机的访…

八.STM32F030C8T6 MCU开发之电源掉电检测案例

八.STM32F030C8T6 MCU开发之电源掉电检测案例 0.总体功能概述 使用STD库–en.stm32f0_stdperiph_lib_v1.6.0。 单片机在正常工作时&#xff0c;因某种原因造成突然掉电&#xff0c;将会丢失数据存储器(RAM)里的数据。在某些应用场合如测量、控制等领域&#xff0c;单片机正常…

RedisMysql同步

1. canal Canal&#xff0c;阿里巴巴 MySQL binlog 增量订阅&消费组件&#xff0c;译意为水道/管道/沟渠&#xff0c;主要用途是基于 MySQL 数据库增量日志解析&#xff0c;提供增量数据订阅和消费。 首先了解一下mysql主备复制原理&#xff1a;   &#xff08;1&#x…

51单片机计算定时器初值

51单片机计算定时器初值前言理论分析工作方式寄存器 TMODGATE 门控位C/T 计数器模式和定时器模式选择位M1 M0 工作方式选择位定时器/计数器控制寄存器 TCONTCON补充&#xff08;中断相关&#xff09;计算过程补充&#xff1a; 方式2运行原理源码前言 芯片使用AT89S51参考书目《…

Vue2.0开发之——Vue基础用法-列表渲染指令(24)

一 概述 列表渲染指令v-forv-for 中的索引使用 key 维护列表的状态key 的注意事项 二 列表渲染指令v-for 2.1 概念 vue 提供了 v-for 列表渲染指令&#xff0c;用来辅助开发者基于一个数组来循环渲染一个列表结构。v-for 指令需要使 用 item in items 形式的特殊语法&#x…

C#程序发布时,一定要好好地保护,不然你会后悔的

上次分享一个C#混淆开源项目《一个对C#程序混淆加密&#xff0c;小巧但够用的小工具》&#xff0c;发现大家都非常感兴趣&#xff0c;但也发现很多人&#xff0c;不了解为什么没有混淆&#xff0c;就会很容易被破解。 所以今天给大家做一个教程&#xff1a;如何通过工具来反编…

[网络工程师]-传输层协议-UDP协议

用户数据协议&#xff08;User Datagram Protocol&#xff0c;UDP&#xff09;是一种不可靠的、无连接的数据报服务。源主机在传送数据前不需要和目标主机建立连接。数据附加了源端口号和目标端口号等UDP报头字段后&#xff0c;直接发往目的主机。这时&#xff0c;每个数据报的…