首页 > 其他分享 >【转载】深入剖析三维几何内核(1)--基础

【转载】深入剖析三维几何内核(1)--基础

时间:2023-04-08 22:00:58浏览次数:71  
标签:PS -- 拓扑 ACIS 三维 剖析 内核 几何

转载 深入剖析三维几何内核(1)--基础

本文将对几何内核涉及的专业术语,设计理念,应用领域,以及现状做进一步的介绍。
-------------------------------------------
计算机中表示三维形体的模型,按照几何特点进行分类,大体上可以分为三种:线框模型、表面模型和实体模型。如果按照表示物体的方法进行分类,实体模型基本上可以分为分解表示、构造表示CSG(Constructive Solid Geometry)和边界表示BREP(Boundary Representation)三大类。主流几何内核的做法是底层使用BREP结构,把CSG作为操作BREP结构的管理方法。
-------------------------------------------
在内核里,按照使用目的我们一般把数据分为两类:
几何和拓扑
“几何”描述的是具体位置和形状,“拓扑”描述的是位置关系。

“几何”比较容易理解,就是我们通常所说的点,线,面,体。线又可以分为直线,线段,圆,圆弧,Nurbs曲线,贝赛尔曲线等各种线,面也类似可以分为平面,非参数曲面,参数方程定义的曲面等。而体则定义了各种实体,长方体,圆柱,球,圆环,组合体等

为什么要有“拓扑”的概念?

其实很好理解,举个例子:
一条线段有两个顶点,当我们只知道其中一点的坐标数据时,希望得到该点在哪条线段上。如果没有拓扑信息,简单的办法就是全局计算遍历一遍,缺点显而易见;如果有拓扑信息,记录了该点的拓扑信息,即该点的上层拓扑直线,我们直接拿点的拓扑信息就可以了。

“拓扑”这种记录位置关系或者对象关系的数据结构在三维几何计算中非常有用,是一种基础数据结构。

ACIS/PS中的拓扑


OCC中的拓扑

三维里没有“三维”

Boundary Representation(BRep),边界表示方法是目前主流的几何内核ACIS/OCC/PS使用的方法,主要原因是这种几何表示方法比较直观,简单,通用,适合大部分几何造型以及建模需求。

在该方法中,虽然拓扑上定义有“体”, 但实际上体也是由面来表示,比如一个长方体,由六个面构成,而体的内部是空的。如下图



有朋友可能会问:如果我想得到体里面的数据怎么办?

三种方法:

  1. 切开实体,生成两个新的实体,如上图重新构建新的基于BRep的长方体;当然这个过程在软件中是“原子操作”,一步完成,也就是说用户感觉不到体内的空洞存在。
  2. 在有限元方法中,我们有形函数,利用形函数可以得到体积内任意一点的信息,当然这只适用于比较规则的几何体。
  3. 类似于体渲染的切片技术。在CT扫描中,CT会生成多幅图像,然后根据图像进行三维重建,重建后就可以得到任意位置的信息,这是目前比较成熟的技术。医疗,地质,探伤等领域会普遍用到三维重建的切片技术。

对于几何来说,BREP是万能的吗?

当然不是。
在很多领域,基于BRep的几何内核派不上用场。比如医疗行业,人的各种器官都是非常不规则的几何体,只能通过表面的三维细化面片重建。而基于BRep的拓扑几何结构过于重量化,海量的三角面片如果使用BRep,性能会非常差。
在CFD仿真中,大部分的模型都是基于面片数据,比如STL数据格式,而很少使用SAT,X_T,STEP等格式,即使使用了这些格式,最后也只是拿三角化后的数据。

在很多专业设计领域,比如需要很多流线型的曲面曲线非等值面设计,基本都会使用专业的设计方法和工具,而不会使用BREP结构。

对于一些复杂的数学方程和公式定义的异形几何,BREP也无能为力。

为什么几何内核是工业仿真软件的基础之一

在 一些常用软件的几何内核(点击链接查看) 一文中,我们看到几乎所有的CAD/CAE/EDA/CFD建模仿真软件都会使用PS或ACIS两种内核。
其实原因也很简单,工业仿真软件最大的几个特点:稳定性,可靠性,性能,以及兼容性! ACIS/PS的底层应用非常成熟,基于ACIS/PS的不同程序之间可以直接无损交换数据。
虽然我们可以看到ACIS/PS每年都在更新,但实际上底层的结构还是几十年前的,不曾动过,现在的更新更多的是上层应用以及来自客户新需求。

有人会问:为什么不能超越ACIS/PS?
其实这种问题就类似于:为什么不能发明一种新的键盘?

不是不能超越ACIS/PS,而是超越的成本太高,而且这种成本并不是单指通过砸钱,很多有用的实际功能都来自于工程实践和用户迭代,这些都被封装了起来。
之前就说过:对于长期从事工业仿真软件研发的企业来说,几何内核的研发是必要的,但是不需要做类似ACIS/PS通用的几何内核,而是要做针对自己行业的,针对业务流程的轻量级的几何内核。使用商业内核的绝大部分企业都只使用了其中非常小的一部分功能(可能10%都不到),却要支付高昂的license费用。

几何内核现状

发展到今天,几何内核和其它工业软件基础技术一样,技术上并没有太大的突破。主要是来自客户的需求以及应用层面的改进。
其实除了大家耳熟能详的ACIS/PS/OCC等几何内核,市场上还有许多做内核的小公司和企业,只不过名声不大。笔者接触过的至少就有7,8家。有些确实做的不错,有的有不少亮点。
相比于单纯的三维CAD设计建模,工业仿真软件对几何内核有更高的要求。以后几何内核的发展更多的源自于上层应用需求,比如CAD/Mesh无缝结合,性能持续改进,直接介入用户业务等等。

标签:PS,--,拓扑,ACIS,三维,剖析,内核,几何
From: https://www.cnblogs.com/Nicander/p/17299343.html

相关文章

  • 三种等待方式
    方式1:线程等待:Thread.sleep(xxxx)只要在case中加入sleep就会强制等待设置的时间后才会执行之后的命令,这种等待一般适用于调试脚本的时候。java代码//等待3秒Thread.sleep(3000);//完全退出浏览器driver.quit();  方式2:隐试等待:driver.manage().timeouts().implicit......
  • 带源码的FPGA IP开源网站
    转载自:https://mp.weixin.qq.com/s/mNBhf3_-1zRFwUgaQmWYEQ1、fpga4funhttps://www.fpga4fun.com/你能在这个网站上找到什么?您可以找到信息页面,以及使用FPGA板构建的FPGA项目。注重点:项目。2、OPENCOREShttps://opencores.org/Opencores是一个开源的数字电路设计......
  • 并发兼容性测试
    Web测试项目中经常进行浏览器兼容性相关的测试工作,因为兼容性测试的工作重复性相当高,所以导致手工测试效率低下测试人员积极性降低。TestNG提供了并发执行测试用例的功能,可以让测试用例以并发的形式执行,实现测试不同浏览器的兼容性测试。下面代码中分别使用Chrome、Firefox和......
  • Expression-bodied members (=>)
    C#中有一种简写方式叫做expressionbody https://learn.microsoft.com/en-us/dotnet/csharp/programming-guide/statements-expressions-operators/expression-bodied-members即使用操作符=>代替只有一行代码的一些场合,省去了return即{},坦率的说我不是很喜欢这些语法糖,但......
  • OrangeX4-HyperSnips快捷命令
    ==fraction==simplefractionSnippetsnippet//"Fraction"iAm\\frac{${1:${VISUAL}}}{$2}$0endsnippetexampleinput://latex:$\frac{}{}$visual:\(\frac{}{}\)fractionno'()'Snippetsnippet`((\d+)|(\d*)(\\)?([A-Za-z!]+)......
  • 52、K8S-监控机制-Prometheus【理论知识】
    Kubernetes学习目录1、监控基础1.1、监控机制1.1.1、数据层面我们如果要监控数据,首先得有数据,也就是说,这些数据应该可以被记录下来,或者被暴露出来,数据常见的产生、直接或间接暴露方式的方式如下:1、硬件本身的记录信息-以文件或者以内存属性的方式存在2、应用业务的接口-......
  • select下拉框处理
    1.selectByIndex()根据索引来选取,从0开始2.selectByValue()根据属性value的属性值来选取3.selectByVisibleText()根据标签之间的Text值,也就是页面显示的注意:导入的包要正确不然会报错。  importorg.openqa.selenium.support.ui.Select;单选下拉列表:HTML源码<tr>......
  • 设备树 aliases
    在设备树中有一个叫做aliases的节点:/{#address-cells=<1>;#size-cells=<1>;aliases{fimc0=&fimc0;fimc1=&fimc1;fimc2=&fimc2;i2c0=&i2c0;i2c1=&i2c1;i......
  • API实例详解
    一、访问网页地址:get(url)Java代码Stringurl="http://www.baidu.com";driver.get(url); 二、刷新当前网页:navigate().refresh()java代码Stringurl="http://www.baidu.com";driver.get(url);driver.findElement(By.id("kw")).sendKeys("123......
  • 从零开始制作示波器--原理图设计之CIS库制作-0-CIS库建立(cadence-orcad16.6)
    1、前言前几天在咸鱼上偶然购得hp-54622示波器主板一块,此主板相对完整(除输入BNC接头缺失外)。主板上包括两块AD9054ABST-135芯片,此芯片为8-Bit,200MSPSA/DConverter。但主板上主芯片无资料,故打算业余时间基于此ADC设计一款示波器。一切从零开始。本次电路设计拟采用c......