在计算机辅助设计系统中计算建模对象的边界的方法 背景技术
本发明涉及计算机程序和系统领域,具体而言,涉及计算机辅助设计(CAD)、计算机辅助制造(CAM)和计算机辅助工程(CAE)系统领域。
多种用于设计部件、部件组件及其产品的系统和程序在市场上有售,例如Dassault Systemes(达索系统公司)采用商标CATIA(计算机辅助三位交互应用)所提供的。CATIA是多平台CAD/CAM/CAE软件套件,通常称为3D产品生命周期管理(PLM)软件套件。其支持多阶段的产品开发(CAx),从概念化到设计(CAD)以及制造(CAM),直到分析(CAE)。该软件套件可以通过应用程序编程接口(API)来进行定制。采用专用的API,一些版本可适用于各种编程语言。
这些通常所说的CAD系统特别地允许用户构造并操纵对象或者对象组件的复杂三维(3D)模型。从而,CAD系统通过使用边或线,在一些情形下使用面,来提供建模对象的表示。这些CAD系统将部件或部件组件作为建模对象来进行管理,这些对象主要是几何结构的规范。具体而言,CAD文件包含规范,根据这些规范来生成几何结构。根据几何结构来生成表示。规范、几何结构和表示可以存储在单个或多个CAD文件中。CAD系统包括图形工具,用于向设计人员表示建模对象;这些工具专用于显示复杂对象——在CAD系统中表示对象的文件的通常大小对于部件来说扩展达到兆字节范围,并且组件可以包含数千个部件。CAD系统对存储在电子文件中的对象的模型进行管理。
采用已知的CAD系统设计机械部件可以看作定义所述部件的几何形状及大小,以符合功能以及制造的要求。大体上,所得到的形状是设计人员创建的基本零件的组合,例如垫、套、槽、轴等等。通过复杂的几何和拓扑计算,CAD系统得到实体(solid)(机械部件)的边界表示,例如封闭且有向的表面。
人们了解例如几何设计、加工仿真、机器人学或者数字样机领域中的扫描体的概念。给定实体(下面称为“轮廓(profile)”)及其迹线,称扫描体为轮廓沿其迹线的所有位置的并集。扫描体的表示可用于设计形状、对材料移除或增加的过程进行仿真,检测碰撞以及计算移动部件和机构中的间隙(clearance)。例如,计算扫描体对于确定在工作期间振动的车辆马达所需要的空间是有用的。另外,计算扫描体对于确定车轮在左转和右转以及上移和下移时由于有了减震器而需要的空间是有用的。另外,扫描体对于确定制造工具所需空间是有用的。
对此,可以依赖Minkowski(闵科夫斯基)求和或加法。Minkowski求和的有效计算可用于计算大的偏移和加工迹线或者修复多面体模型。
由于几何建模中扫描体的重要性,在学术研究以及商业应用中都已经开发了许多解决办法来表示所述扫描体。
朴素方法(下面称作方法“M1”)包括考虑轮廓体延其迹线的有限个实例的并集。
具有多种变体的更为精细的方法(下面称为“M2”)包括将给定的实体或轮廓分解成凸状部件,接着生成凸状体,其是每个凸状部件经过分段线性迹线的每段的扫描的结果,然后取所有这些凸状体的并集(参见例如,“Accurate Minkowski sum approximation of polyhedral models”,GokulVaradhan,Dinesh Manocha,Graphical Models,68(2006)343-355,MachineWorks的视频模式使用该方法)。
另一类方法(“M3”)包括通过考虑仅根据局部几何结构可出现在扫描体边界的所有二元组(轮廓三角形,迹线点)或者(轮廓边,迹线边),来计算扫描体边界的超集。这些方法生成非结构化的一组三角形(三角形“汤”),这些三角形的并集在理论上是扫描体的子集以及扫描体边界的超集(参见例如本申请人的美国专利文献US 6,993,461)。
已经针对二维(2D)扫描体计算研究出在数学上具有充分根据的方法(“M4”,称为“动态卷积(kinetic convolution)”)(参见例如L.J.Guibas,M.Overmars,and J.Stolfi.A kinetic framework for computational geometry.Inproc.24th Annu.IEEE Sympos.Found.Comput.Sci,pages 100-11,1983)。该方法生成2D闭合的分段线性曲线。提出了数种2D实现的开拓性工作例如在下面的文献中进行了描述:
-Ron Wein.Exact and Efficient Construction of Planar MinkowskiSums using the Convolution Method ACS Technical Report No.:ACS-TR-241300-04;以及
-Victor Milenkovic,Elisha Sacks:An approximate arrangementalgorithm for semi-algebraic curves.Symposium on ComputationalGeometry 2006:237-246。
另一方面,其他工作将2D中对线的研究扩展到3D的多面体实体。主要成果是以下过程:给定两个边界为多面体二维流形的实体,计算所谓的“多面体追踪(polyhedral tracing)”,参见例如:
-J.Basch,L.J.Guibas,G.D.Ramkumar and L.Ramshaw,Polyhedraltracings and their convolution.In Proc.2nd Workshop onAlgorithmic Foundations of Robotics,1996;以及
-G.D.Ramkumar:“Tracings and their convolution:theory andapplications”,PhD.Thesis(1998),Stanford,以及有关的后续论文。
在实际中已知实现方法(M1)、(M2)、(M3)和(M4)的两种方式。例如,方法(M1)和(M2)生成一组实体,这些实体地并集是结果。类似地,方法(M3)生成一组三角形。仍然存在争论的在实际中计算并集的显示表示并不是强制性的。这对于3D复杂几何结构来说甚至是有问题的,因为其对于取整误差极其敏感。
另一类方法依赖于体素或dexel(深度元素)体表示(“M5”,参见“MachineWorks”中的“照片模式(Photo mode)”)。
接着,所谓的“包装方法(wrapping methods)”(“M6”)生成对扫描体的密闭的粗略近似。该方法快速且鲁棒,但不准确。该技术例如在文献“Swept volume approximation of a polygon soup”,J.C.Himmelstein,E.Ferré,J.P.Laumond,International Conference on Robotics and Automation,10-14April 2007,Roma,pp 4854-4860中进行了描述。它在“Kineo Computer AidedMotion”公司的“Kineo path planner”产品中被实现。该方法相当于通过计算到3D规则栅格的顶点上的扫描表面边界的距离来计算扫描体的隐式表示。该距离字段根据迹线的采样来计算,所述采样满足所产生的扫描的给定3D公差。然后使用经典算法(称为“marching cube”)的变体来收集外表面。
最后,多个专利或专利申请广泛地处理本主题,参见例如:US7,091,995,US 7,031,790,US 6,690,385,US 5,649,084,US 6,307,555,US6,989,830,US 6,988,121,EP-A-0280968,EP-A-0405106,EP-A-0280968,US 5,159,512,US 2003/014133,US 2005/143963以及US 2004/059450。
前面提到的方法M1-M6并非没有缺陷。
例如,方法(M1)要求考虑大量的扫描体实例,因此如果要求良好的准确性则在存储和计算时间方面是非常昂贵的。
方法(M2)具有与方法(M1)相同的缺点,但在程度上较低。对于迹线的每一段以及轮廓的每个凸状部件,该方法生成复杂度(即三角形数量)大致与凸状部件相同的体。
方法(M3)在多个方面是有效的。例如,生成的三角形数量具有当迹线未进行太多“缠绕”时所有效生成的三角形数量的数量级。该方法的主要缺点是对取整误差敏感:顶点坐标中任意小的扰动都可能造成结果的边界中小的缝隙。通常来说,很容易生成所述一组三角形。然而,由于鲁棒性问题,一般不可能提取拓扑上有效的密闭多面体。(M3)的另一限制是其受限于一维迹线,这与计算Minkowski求和无关。
二维版本的方法(M4)的明显缺点是其受限于2D多边形。另外,这里选择的理论方法引入了重要的限制。首先,其固有地受限于Minkowski求和。具体而言,这些过程的路径规划、机器人或加工应用受限于平移运动(意思是只有3个轴的加工是可能的)。其次,Minkowski求和的运算对象必须是边界为多面体二维流形的实体,其中它们所有的顶点满足所谓的“半球假定”:对于每个顶点V,向外指向与V相邻的面的法向量集合必须包括在半球中。现在,存在许多违反半球假定的流形顶点的实例。最后,另一缺点在于,就本发明人所知,该3D过程仍未基本实现。
方法(M5)是有效的且鲁棒的,但是数据的大小随所需准确度急剧增加。因此其对于准确度不重要的应用是好方法。
方法(M6)生成保守近似,其非常适用于进行粗略的碰撞分析,但对于加工仿真来说不够准确。此外,在理论上,缺点是时间和存储代价呈O(1/ε3)增加,其中ε是要求的准确度,而理论上增加速度O(1/ε)是优选的。实际上,在实践中,如果相对准确度(模型大小与所要求准确度之间的比)小,则方法(M6)是快速的。在上面相关论文中提到实例利用了大小范围从323到1283体素的栅格,这分别得到值为64到256的相对准确度。该准确度对于粗略的路径规划或碰撞检测或者作为第一快速拒绝步骤可能是足够的。然而,制造应用需要通常范围从103到105的相对准确度。
【发明内容】
对上述分析概括来说,现有技术对取整误差表现出太强的敏感性,在存储或计算代价上是昂贵的,和/或至少对于一些应用来说不够准确。因此,仍然存在对鲁棒(拓扑上正确并且密闭)且准确的计算扫描体(更一般地,计算建模对象的边界)的方法的需要,该方法与对象的一大类兼容。
为此,在一个实施例中,本发明因此提供了一种计算机实现的方法,用于在计算机辅助设计系统中计算建模对象的边界,所述方法包括:访问将建模对象定义为单纯m-复形的数据;将所述单纯m-复形投影到中,其中m≥n;采用所述单纯复形的投影中的多面体n-1-回路来计算所述建模对象的多面体边界,所述多面体n-1-回路基本上设定所述单纯复形的投影的边界。
在其他实施例中,根据本发明的方法可包括一个或更多个下面的特征:
-在计算步骤,多面体n-1-回路包括单纯复形的投影的单纯形;
-n=3时,计算多面体边界的步骤包括:测试单纯复形的投影的三角形,其中,测试所述三角形包括,对于每个被测三角形,测试被测三角形的单纯形余面(coface)是否位于所述每个被测三角形的同一侧;
-在访问数据步骤,所述单纯复形是单纯乘积。
-在访问数据步骤,所述单纯复形是给定对象的多面体轮廓与一系列平移和/或变换的单纯乘积;
-在访问数据步骤,所述单纯复形是给定对象的多面体轮廓与平移和/或变换空间中的单纯复形的单纯乘积;
-所述单纯乘积表示所述多面体轮廓沿所述平移和/或变换空间中的单纯复形扫描的空间;
-平移和/或变换空间中的所述单纯复形是k个平移和/或变换系列的k维复形乘积;
-所述平移和/或变换空间中的单纯复形是所述平移和/或变换空间中的3D多面体;
-单纯乘积表示所述轮廓沿所述系列扫描的空间;
-在访问数据步骤之前,所述方法包括计算所述单纯乘积的步骤;
-在计算所述单纯乘积的步骤,所述方法还包括:访问定义所述多面体轮廓和所述多面体迹线的数据;从所述多面体轮廓和所述多面体迹线计算笛卡尔乘积;以及对所计算的笛卡尔乘积执行一般化的三角剖分。
本发明还提出了包括程序代码模块的计算机程序产品,所述程序代码模块用于实现根据本发明的方法。
本发明还涉及计算机化的系统,包括用于实现根据本发明方法的模块。
【具体实施方式】
现在将通过非限制性举例的方式并参照图1-87中示出的附图来描述实施本发明的系统,在下面的详细说明中将对这些附图进行讨论。
本发明提供了在CAD系统中计算建模对象(通常为扫描体)的边界的方法。建模对象被定义为单纯m-复形,通常从多面体轮廓和多面体迹线获得。然后将复形投影到:为此,可以调用适合的映射或变换。然后,该方法采用单纯复形投影的多面体n-1-回路来计算建模对象的多面体边界,其中,多面体n-1-回路设置单纯复形的投影的边界。
本发明是通用、有效且鲁棒的方法,适合于快速且准确地计算建模对象的表示为多面体回路的边界。为了举例说明,下面我们将考虑对扫描体的应用。下面给出多面体回路的定义。具体而言,输出并不是未结构化的一组三角形,粗略而言,而是封闭且拓扑上一致的多面体表示。虽然该表示可以自相交,但是在组合上是密闭的。具体而言,即使小的扰动或者浮点取整应用到输出,该输出仍然有效(拓扑上正确且密闭),由此保持所实现算法的鲁棒性。本发明使得可以安全地计算建模对象的边界,即使所计算的边界有时可能自相交。本发明具有将在下面描述的数种应用。另外,与已知方法相比,由于本方案(即,投影定义对象的单纯复形,并随后采用n-1-回路来计算多面体边界)而获得的鲁棒性使得节省相当数量的计算和存储负载。
例如,与前面讨论的方法(M1)和(M5)相比,本发明的方法可以在无需大量存储和计算时间的情况下获得准确度。与(M2)相比,所提出的方法维护合理数量的三角形。与(M3)相比,所提出的方法生成在组合上密闭的输出,该输出对于取整误差是稳定的。此外,在原理上,该方法可以计算轮廓或任意维度沿任意维度的迹线的扫描。实际上,该方法允许计算Minkowski求和,以及由具有任意数量的自由度的机构进行的体扫描。与本发明不同的是,方法(M4)限于2D,而无法应用于3D扫描体的计算。
现在将参考图1~2来描述整体过程,其描述了根据本发明实施例的数据流。图1示出了获得单纯乘积的示例性步骤。图2示出了从单纯复形得出零边界表面的步骤。
首先,如图2中所示,该方法包括访问将建模对象定义为单纯m-复形的数据的步骤S50。
单纯复形是通过将点、线段、三角形(以及更一般地,它们的p维等价物)“粘合在一起”而构造的拓扑空间。使用单纯复形的一个优点是它们的属性可以针对任意维度m进行一般化。单纯复形使得可以通过简单的数学运算来计算建模对象的边界,相对于现有技术中描述的方法,这需要更少的资源。下面详细描述单纯复形。
存在多种方式来获得单纯m-复形。例如,单纯m-复形(也称为单纯复形)可以获得为图1中所示的单纯乘积。图1给出了以单纯乘积的方式获得单纯复形的实例。步骤S10-S40示出了单纯复形可以从多面体轮廓Γ1乘以多面体迹线Γ2的乘积而获得。该乘积可以是给定对象多面体轮廓进行一系列平移和/或变换得到的单纯乘积,如将参考图11~20以及图29~32所特别说明。
单纯m-复形是m维的单纯复形。整数m是复形的所有单纯形的最大维度。m可以任意大。例如,如果多面体轮廓Γ1的维度为k,其中k=3(例如,多面体轮廓是3D形状),而多面体迹线Γ2的维度为l,其中l=2(例如,多面体迹线是诸如三角形这样的2D形状),则单纯m-复形的维度是维度m=k+l的单纯复形,在该实例中,m=3+2=5。如果多面体轮廓Γ1的维度是k,其中k=0(例如,多面体轮廓是点),而多面体迹线Γ2的维度为l,其中l=0(例如,多面体迹线是点),则单纯m-复形的维度是维度m=k+l的单纯复形,在该实例中,m=0+0=0。优选地,如果希望计算2D扫描,则m≥2,而对于3D扫描,m≥3。
如图1中所示,Γ1和Γ2的单纯乘积∏本身优选地通过以下两步处理来计算:在步骤S20处进行笛卡尔乘积,随后在步骤S30处进行三角剖分。在维度大于2的情况中,步骤S30可以包括四面体化。因此,步骤S30可以看作“一般化的”三角剖分步骤。
对象∏将Γ1和Γ2的拓扑混合成更高维度的结构,该结构潜在地包括所生成扫描表面的拓扑和几何结构。更一般地并且与获得单纯复形的方式无关地,单纯复形简单来说是图2的步骤S60的适当开始点。
图2的步骤S60调用变换或映射函数F(·),以便投影(或嵌入)中的单纯m-复形,其中m≥n。该投影使得能够将“外围”空间或“物理”空间中的位置指派给单纯m-复形的每个顶点,“外围”空间为其中投影可由CAD系统的用户操纵的空间。整数n是在其中投影步骤S50的单纯m-复形的“外围空间”或“物理空间”的维度。条件m≥n防止了变换或映射函数F(·)不能起作用的情形。例如,根据前面的实例,维度m=5的单纯m-复形通过变换或映射函数F(·)投影到n=3的“外围”空间,即,将单纯5-复形投影到三维(3D)空间。另外,作为另一实例,可以使n=2,以便计算平面阴影。
另外,根据单纯复形的属性以及映射函数F(·),n不限于给定范围的值,并且n的最小值是1。
由于映射函数F(·)将单纯m-复形从m维空间引回n维空间,所以步骤50的单纯m-复形以某种方式处于“过渡”空间内。为了更好地进行理解,称n维空间的“单纯m-复形”为“单纯m-复形的投影”。
在一实施例中,目标是得到轮廓Γ1沿迹线Γ2的表面∑(即,扫描表面)。存在数种可能来将单纯m-复形投影到中,正如通常存在数种方式来将一个对象投影到另一对象上一样。然而,下面将详细讨论的优选实施例通过简单且鲁棒的实际方案提供扫描表面∑,这里将该方案称为“重数(multiplicity)”过程,其针对单纯复形∏的投影进行。
从全局观点看来,图2的步骤根据输入的单纯复形∏和映射F(·)(例如,3D映射F(·))提供了为零边界表面∑的扫描表面。
尽管本发明可以应用来沿迹线扫描三角化封闭表面,但是附图通过沿平面迹线扫描的一维平面轮廓对2维空间中的整体过程进行了举例说明;其中平面轮廓和平面迹线位于同一平面。该举例显然更易于理解和说明。
例如,图3示出了具有封闭周线的轮廓10,以及用折线11表示的迹线。
图4说明了图3中部件的笛卡尔乘积:出现平行四边形的面。
图5示出了其单纯乘积,由此三角形面出现。
图6示出了简单而鲁棒的实际方案,称为“重数”过程,其在步骤S60处对单纯复形∏的投影执行,该投影可以例如是单纯乘积的投影。“重数”过程的输出提供了在图7示出的步骤S70的零边界表面∑(可以是多面体边界)。实际上,计算多面体边界的步骤相当于测试单纯复形的投影的三角形。讨论中的这种“测试”对于每个测试的三角形包括:测试三角形的单纯形余面(coface)是否位于所述三角形的同一侧。
重数过程计算目标是提供建模对象的边界。为了达到该目标,重数过程使用算法来计算单纯复形的投影中的多面体n-1-回路,其结果是,基本上设定单纯复形的投影的边界。多面体n-1-回路的整数n表示在其中对步骤S50处提供的单纯m-复形进行投影的“外围空间”或“物理空间”的维度。优选地,多面体n-1-回路包括单纯复形的投影的单纯形。
多面体n-1-回路是特殊的多面体n-1-链,其遵从于称为零边界条件的条件。多面体n-1-链是一组有向n-1单纯形,其具有指派给每个n-1-单纯形的称为重数的带符号整数。尽管多面体n-1-链可以是密闭的,但是该密闭属性并不是必需的。相反,多面体n-1-回路满足零边界条件,该条件使多面体n-1-回路具有该密闭属性。在下面的说明中对零边界条件进行解释。
在重数过程中,向单纯复形的投影的单纯形(也简称为单纯形)提供方向。顺便提及,该方向还可以被提供给单纯复形的多个单纯形,即,先于投影单纯复形进行。提供给单纯复形的投影的单纯形(或单纯形)的方向的选择是任意的,并且不影响最终结果。事实上,如果将相反方向提供给单纯复形的投影的单纯形(或单纯形),则重数过程计算将得出具有相反符号的重数。图6描绘了通过各种箭头示出的方向的选择。
然后,计算单纯复形的投影的单纯形的重数。例如,单纯复形的投影的边(其为1-单纯形)的重数是单纯复形的投影的共用单纯复形的投影的相同端顶点的多条边的数目。图6和40说明了边的重数的概念,图71~73示出了如何定义三角形的重数的实例。
回到图6,边63具有重数+2,因为其被两个三角形共用。边61和62分别具有重数+1和1。这两条边都由一个1三角形共用。然而,由于边61和62具有相反的方向,所以它们的重数相反。
然后,确定零边界条件。为了定义零边界条件,考虑n=3的情形。得到的多面体2-链由一组3D空间中的逻辑顶点以及一组有向三角形来定义,所述一组有向三角形由顶点的有序三元组来定义。顶点是所述逻辑顶点,因为允许两个不同的逻辑顶点共用相同的坐标。将重数赋给每个有向的三角形,以使得改变重数的符号等价于反转三角形的方向。如果作为三角形中出现的逻辑顶点的任意二元组的任意边在前向顺序以及反向顺序上被进行重数计数的三角形遍历的次数正好相同,则称多面体2-链为多面体2-回路。该最后条件称为零边界条件。
图7说明了非零重数单纯形(在该情况下,为非零重数线段或边),其为图2的输出。在图6上,S70中的重数过程考虑单纯复形∏的投影中的边(或线段)61,62,63,...的两个余面三角形中的一个,并确定每个线段的第三顶点相对于该有向线段的位置。图6中应用的重数过程对于深粗体的线段将返回+2。重数过程对于浅粗体的线段将返回+1。重数过程对于粗点线段将返回-1。重数过程对于点线段将返回0。重数过程对于点线段返回0的事实表示,所述线段在两侧都具有“材料”,并因此所述线段不在单纯复形的投影的边界上。在重数过程对于其他线段返回+1、-1、+2的情况中,这表示所述线段在一侧具有或多或少的“材料”,并因此所述线段位于单纯复形的投影的边界上。结果示出在图7上,其中仅保留重数不为0的线段(也称为具有非零重数的边或线段)。这得到了建模对象的边界。
图8、9和10描绘了图2的步骤。通过采用两个在末端的三角化L形面封闭图1步骤S40的单纯乘积的“开管(open tube)”来获得单纯复形∏。对“开管”的封闭在图8中用收缩且具有阴影的三角形来表示。
步骤S50的单纯复形因此是L-面边界乘以迹线与L-面乘以迹线边界的并集,该迹线边界用端点来表示。该并集形式上表示为∂Γ1×Γ2∪Γ1×∂Γ2.]]>
一旦从(例如)单纯乘积获得单纯m-复形,步骤S60的主过程的算法(重数过程)对该组三角形运行。首先,将m-单纯复形投影到中。然后,计算该单纯复形的投影的重数,如图9所示。
然后,如图10所示,根据非零重数来产生扫描周线(边界)。具有非零重数的边被保留,并提供单纯复形的投影的边界。
本发明是计算机实现的方法,用于在计算机辅助设计系统中计算建模对象的边界。该方法包括访问数据步骤S50,该数据将建模对象定义为单纯m-复形。图11~20说明了将建模对象定义为单纯m-复形的四种扫描情况。这四种情况并未穷尽所有可能的扫描。
优选地,如图11-12所示,在访问数据步骤,单纯复形是单纯乘积S40。这是简单的扫描情形。轮廓P1是多面体,迹线P2是分段线性曲线,换言之,是折线。图12表示将轮廓P1沿迹线P2进行一系列平移后的结果。
有益地,仍在访问数据步骤,单纯复形是给定对象的多面体轮廓进行一系列的平移和/或变换的单纯乘积S40。这涵盖了大量的用于获得单纯复形的方式。图13和14说明了这样的变换,这是之前情况的一般化。在该情形下,采用一系列对多面体轮廓P1进行的变换来代替所述一系列平移。该一系列变换仍然称为迹线P2。在该情况下,其结果是连续变换的线性近似。
图15、16和17示出了进一步的实例。该情况包括两个多面体的所谓的Minkowski求和:给定两个通过其边界的三角剖分所给出的多面体P1和P2,结果是Minkowski求和的表示,记为P1⊕P2,]]>这是空间中点x的集合,可以表示为P1中的点与P2中的点的求和:
P1⊕P2={x=x1+x2,x1∈P1,x2∈P2}]]>
换言之,P1⊕P2]]>可以看作P1沿着P2中的向量平移的所有复本的并集,或者,等价地看作P2沿着P1中的向量平移的所有复本的并集。多面体P1是轮廓,多面体P2是迹线,但是在该特定情况中,轮廓和迹线充当相同的角色,并且可以进行交换。
图18、19和20说明了又一情况,其是图16-17情形的一般化。P1是轮廓,P2是迹线。在图18、19和20中,多面体P2是变换空间中的抽象多面体。如图19中所示,迹线P2的顶点代表变换,其可以是旋转、缩放或更为一般的空间变换。对于通常的三角剖分,三角形是顶点的三元组。图20示出了变换结果。这可以看作P1的点进行P2中的变换后所有像的并集的近似(通过线性插值)。
本发明是计算机实现的方法,用于在计算机辅助设计系统中计算建模对象的边界。换言之,本发明是计算机实现的方法,用于在计算机辅助设计系统中设计建模对象的边界。该方法包括访问数据的步骤S50,在步骤S55处提供映射函数F(·),采用该映射函数将单纯m-复形投影到中,其中m≥n,以及在步骤S60~S70处计算所述建模对象的多面体边界。
对单纯复形、多面体链和多面体回路进行更详细地阐述,以便给出步骤S60-S70的通用公式会表示,所述步骤S60-S70采用单纯复形的投影中的多面体n-1-回路来计算所述建模对象的多面体边界,所述多面体n-1-回路基本上设定单纯复形的投影的边界。单纯复形一般化任意维度下的三角剖分的常用概念。单纯复形是通过将点、线段、三角形以及更为一般地它们的p维等价物“粘合在一起”而构造的拓扑空间。
对于整数k≥0,k-单纯形是在至少k维外围空间中非简并位置内的k+1个点的凸包。这k+1个点称为单纯形的顶点。我们将具有顶点v0,v1,...,vk的单纯形记为[v0,v1,...,vk]。
图21举例说明了0-单纯形[v0]。0-单纯形是点,也称为顶点。在图22中示出的1-单纯形[v0,v1]是两个不同点之间的线段,在一般含义上也称为两个顶点之间的边。图23示出了2-单纯形[v0,v1,v2],它是三个非共线点生成的三角形。在图24中描绘的3-单纯形[v0,v1,v2,v3]是4个非共面点生成的四面体。4-单纯形[v0,v1,v2,v3,v4]由在至少4维空间…中的任意3维仿射子空间内都不拟合的五个点生成。当没有指定维度k时,术语单纯形还可以代替术语k-单纯形来使用。
k-单纯形σ的面是任意的j-单纯形,其中j≤k,该j-单纯形的顶点构成σ的顶点的子集。图25示出了3-单纯形,图26示出了3-单纯形的所有面。
单纯复形Γ是单纯形的集合,从而:
-如果一单纯形属于Γ,则其所有面都属于Γ,
-Γ中的两个单纯形的交集或者为空,或者为这两个单纯形的面。第二个条件意思是单纯复形不“自相交”。
如果是σ的面,则称单纯形σ为的余面,如图27(单纯复形)和28(边的所有余面)中所示。
单纯复形的维度是其单纯形的最大维度
一般地,轮廓和迹线都是单纯复形。在前面图11-20的情况中,轮廓是三角形,它是2维单纯复形。在图11-14的情况中,迹线是1维单纯复形。在图15-20的情况中,迹线是2维单纯复形。
给定两个单纯复形Γ1和Γ2,可以构建新的单纯复形,记为∏,例如是Γ1和Γ2的单纯乘积,如图1中所示。如在下面看到的,该单纯乘积不是唯一的。∏的顶点集合是Γ1的顶点集合和Γ2的顶点集合的笛卡尔乘积。因此这些新的顶点属于Γ1和Γ2的相应的外围空间的笛卡尔乘积。现在,给定单纯形的二元组(σ1,σ2),其中σ1是Γ1的单纯形,而σ2是Γ2的单纯形,如果σ1或σ2不是0-单纯形,则σ1乘以σ2的笛卡尔乘积是凸多胞形而不是单纯形。
图29示出了在图20的步骤S20处计算的两个顶点的笛卡尔乘积。图30示出了顶点和边的笛卡尔乘积。因此这些笛卡尔乘积的每个必须被分解成单纯形,即进行三角剖分,以得到单纯复形,真正的单纯乘积。然而,并不存在唯一的将笛卡尔乘积分解成单纯形的方式,这解释了为什么单纯乘积不是唯一的。
例如,如果σ1和σ2是如图31中所示的1-单纯形(线段),则它们的笛卡尔乘积在乘积空间中是平行四边形,并且必须分解成两个三角形(2-单纯形),如图32中所示。如图32中所示,显然存在两种方式将平行四边形分成两个三角形。
类似地,如图33和34中所示,如果σ1是1-单纯形(线段)而σ2是2-单纯形(三角形),则它们的笛卡尔乘积是具有三角形底部的棱柱,其必须分解成3个四面体(3-单纯形),以产生单纯乘积。同样,该分解不是唯一的。一般地,如果σ1是k-单纯形而σ2是j-单纯形,则可将它们的笛卡尔乘积可以分解成(k+i)-单纯形。
这种分解的选择不改变图11-12以及图15-17平移扫描情况下的最终结果。相反,在图13-14以及图18-20中,可以选择最小化特定弦误差的分解或最大化输出实体(例如,用于保守碰撞检测)的分解。
多面体n-1-链和多面体n-1-回路
图2示出一旦将单纯m-复形投影到中,就进行主过程。在步骤S60-S70计算图2的算法的输出,多面体n-1-回路。例如,一旦将单纯m-复形投影到中,计算多面体2-回路。该多面体2-回路是拓扑上密闭的三角剖分,其可能自相交但仍定义了空间的内部和外部区域的。
更精确地,通过3D空间中的逻辑顶点集合和顶点的有序三元组所定义有向的三角形的集合来定义多面体2-链。顶点称为逻辑顶点,因为允许两个不同的逻辑顶点共用相同的坐标。向每个有向三角形赋予重数,以使得改变重数的符号等价于反转三角形的方向。如果作为三角形中出现的逻辑顶点的任意二元组的任意边在前向顺序以及反向顺序上被进行重数计数的三角形遍历的次数正好相同,则称多面体2-链为多面体2-回路。该最后的条件称为零边界条件。换言之,回路是满足零边界条件的链。
图35说明了未自相交的两个多面体1-回路。可以注意到,图左边的回路具有两个逻辑顶点351,它们共用相同的坐标。另外,两个回路都是拓扑上密闭的。事实上,由于每个顶点在前向顺序以及反向顺序上被遍历的次数正好相同,所以验证满足零边界条件。
图36举例说明了自相交的多面体1-回路。同样,验证满足零边界条件。
图37-39示出了多面体2-回路的实例。图37示出了多面体2-回路,其包括两个四面体。两个四面体通过线段(或边)连接,其具有4个2-余面(三角形),如图38中所示。将重数赋予4个2-余面中的每一个,以使得改变重数的符号等价于反转三角形的方向(图39)。可以注意到,在图39中验证满足零边界条件,因为2-余面中出现的任意一对逻辑顶点在前向顺序以及反向顺序上被进行重数计数的三角形遍历的次数正好相同。
图40完成了图6。该图说明了沿着如图11-12所示的开放简单折线对L-形封闭周线进行扫描所获得复形的非零重数线段(或边)。
根据定理,非零重数线段(或边)定义了回路,其为零边界单纯复形。零边界条件以非常巧妙的方式涉及重数和方向。在图40中,零边界条件表示在每个顶点处,所有关联边的重数之和为零。给定顶点v,作为定义,“入”边在v终止,“出”边在v起始。将顶点的重数定义为所有“入”边重数之和减去所有“出”边重数之和。
例如,顶点400为“入”边63和64的重数之和减去“出”边61的重数。因此,顶点400的重数为(+2)+(-1)-(+1)=0。如图40所示,类似的运算应用到每个顶点。
在多面体回路提供的优点中,这种回路扩展了密闭流形多面体实体边界的概念。因此,密闭的多面体的内/外区域被扩展到关于多面体回路的点的索引的概念,即,按照某种含义对“一点在当前多面体内部的次数”进行计数的整数。
一般地,对通常的密闭流形多面体实体边界的坐标的扰动可能使其无效。特别是在发生自相交时会出现这种情况。然而,由于多面体回路的有效性是纯组合的,所以坐标扰动无法破坏其有效性。因此,多面体回路是稳定的,并且该稳定性是鲁棒性的关键因素。
例如,将使用浮点算术运算的旋转矩阵应用到有效多面体的顶点可能使其无效,因为发生了取整误差。相反,将旋转应用到多面体回路的顶点是完全安全的。因此,鲁棒性得以保证。
单纯形的星形和链环
图41到49说明了复形的星形和链环的定义。单纯复形C中单纯形σ(如图41和44中所示)的星形是记为St(σ,C)或简记为St(σ)的单纯复形,其包含C中所有包含σ的单纯形以及所有它们的面,如图42和45所示(阴影三角形)。
单纯复形St(σ)可以使用已经在图27-28中说明了的余面概念来等价地进行定义。获取σ的余面提供单纯形的集合。然后,获取所有这些单纯形的所有面得到σ的星形。在形式上,St(σ)=Face(CoFace(σ))。σ的余面是单纯形的集合,但是σ的星形是单纯复形,其是结构化的对象。
单纯复形C中单纯形σ的链环是记为Lk(σ,C)或简记为Lk(σ)的单纯复形,其定义为St(σ)中所有与σ交集为空的单纯形的集合。在图43和46中,顶点σ的链环是用粗线表示的封闭周线。可以注意到,边界顶点的链环也可以是开放周线,如图46所示。
图47~49举例说明了单纯形σ是边(或线段)的情况。在该情况中,单纯形σ的星形St(σ)由2个2-单纯形(图48中的阴影三角形)定义,而单纯形σ的链环Lk(σ)由2个顶点(图49中的大点)定义。
组合k-维流形
图50~61说明了组合k-维流形的定义。如果对于j=0,...,kC中的任意j-单纯形σ具有链环Lk(σ),该链环或者与k-j-1维的圆盘同胚,或者与k-j-1维的球面同胚,则单纯复形C是k-维流形。换言之,单纯复形C是k-维流形,而不论其是对k-j-1维的圆盘还是对k-j-1维的球面进行三角剖分。在第一种情况下,称σ为边界单纯形,而在后一种情况下,称其为内部单纯形。
前面的图47到49中的单纯复形根据定义是二维流形。所有的内部边具有2个点的链环,所有边界边具有1个点的链环,如图50到52所示。
图53~55说明了非二维流形的单纯复形。边σ由3个三角形共用。它的星形包括整个复形,其链环由3个顶点构成,不是k-1-1=2-1-1=0的球面或圆盘。
图56~58示出了顶点σ的星形,其同样是整个复形,并且该链环由3条共用相对顶点的线构成。显然,这不是k-0-1=2-0-1=1的球面或圆盘。
图56~58说明了,在k-维流形中,内部的k-1单纯形正好是2个k-单纯形的面。在通常维度空间中进行平移,这是通常的方式称四面体化的体的内部面由2个四面体共用,三角化表面的内部边由2个三角形共用,以及简单折线的内部顶点由2条边共用。
如图59-61中所示,球体、球面和圆盘的概念由以下逻辑来管理。给定有限维空间,单位球体是点集X=(x0,...,xn),使得||X||≤1。单位球面是单位球体的边界,即||X||=1的点集X。圆盘是单位球面的一半,即||X||=1且x0≥1的点集X。
图59-61说明了通常的维度。对象之间的拓扑等价性如下定义:可以连续地使其变形成为单位球体(相应地单位球面、圆盘)而未撕裂的对象等价于单位球体(相应地单位球面、圆盘),并还被称为球体(相应地单位球面、圆盘)。因此,根据拓扑观点,2D圆盘等价于2D球体,而1D圆盘等价于1D球体。
更一般地,k维圆盘等价于k维球体。可以注意到,0维球面由2个单独的点构成(图60),而0维圆盘是一个单独的点(图61),而根据约定,负维度球面和圆盘被视为空。
可定向的组合k-维流形
令σ=[v0,...,vk]为k-维流形C的k-单纯形。单纯形σ由其顶点的顺序来定向。对σ的定向包括如下对其(k-1)-单纯形面进行的定向。对于所有j=0,...,k,如果j是偶数,则(略去了第j个顶点)的排序定义了在该(k-1)-单纯形上产生的方向,如果j是奇数,则方向相反。反转单纯形方向表示应该交换例如两个第一顶点。
例如,图62中通过σ=[0,1,2,3]为四面体定向产生以下三角形方向:[1,2,3],-[0,2,3]=[2,0,3],[0,1,3]以及-[0,1,2]=[1,0,2]。相反,如果将四面体方向反转,即σ=[1,0,2,3],则这将产生三角形的反方向。
如果可以通过指定σ的顶点的排序来将“一致的”方向指派给C中的每个k-单纯形σ,则称组合k-维流形C是可可定向的。方向的一致性具有以下含义。组合k-维流形的定义规定C的任何内部k-1-单纯形是正好两个k-单纯形的面,记为和如果和对产生的方向相反,则称给定的方向是“一致的”。换言之,如果两个产生的排序通过奇排列(即,具有负的符号差)而关联,则是一致的。
在图63中,3-维流形C由共用三角形的2个四面体和构成。定向产生[1,2,3]作为方向。定向产生-[2,1,3]=[1,2,3]作为方向。显然,复形C未被定向。然而,它可以通过反转方向或方向来定向。
并非所有k-维流形是可定向的。图64的二维流形是Moebius(莫比乌斯)带的三角剖分,其是不可定向的。
3D胞腔,3D外部胞腔
首先将“多面体回路”Γ的“支撑”定义为其所有三角形的并集。3维空间中Γ的支撑的补集的连通分支称为3D胞腔。只有一个3D胞腔未定界,被称为“外部胞腔”
绕数
给定多面体回路Γ,前面提到Γ的每个三角形由其三个顶点的排序来定向,并且该排序定义一法向量。此外,Γ的每个三角形具有整数重数。给定3维空间中不属于Γ的任何三角形的点X,X关于Γ的绕数是如下定义的整数W。考虑有向半直线Δ其在X开始并且不与来自Γ的任何边相交。该Δ总是存在。称δ为定义Δ从X指向无穷远的方向的单位向量。当Δ与来自Γ的三角形T相交时,如果δ与T的法线nT的点积为正,则称Δ与T前向相交,如果为负,则称为后向相交。它不能等于零,因为等于零表示Δ与至少一条来自Γ的边相交。
采用值W=0来初始化整数W。每当Δ与来自Γ的具有重数μT的三角形T相交时,如果Δ与T前向相交,则增加μT的W,如果Δ与T后向相交,则减小μT的W。
W:=W+sign(nT·δ)μT
称得到的数W(X,Γ)为X关于Γ的绕数。这并不取决于半直线Δ,并且在任何3D胞腔中都是不变的,意思是W(X,Γ)对于同一3D胞腔内所有点X具有相同的值。特别地,对于外部胞腔内所有点X,W(X,Γ)=0。
图65说明了采用(自相交的)平面周线来进行绕数计算。线段方向定义法向量。虚线Δ的方向是从左到右。给定线Δ上的点X,其绕数W的计算初始化W:=0,并沿线Δ从X移向无穷远(向图的右侧)。在该移动期间,当与周线相交时,增加W:=W+1或者减小W:=W-1(如该图中所示)。
过程
给定2个单纯复形Γ1(轮廓)和Γ2(迹线),过程可以首先建立图1所描绘的它们的单纯乘积∏。如图2所示,从单纯复形∏开始,∏的每个顶点V=(v1,v2)可以自然地映射到3D空间中的点F(V)。例如,在图11~12和图15~17的情况下,该点为和F(V)=v1+v2,而在图13~14和图18~20的情况下,该点为F(V)=v2(v1),v1进行v2变换后的像。
例如,如果τ=[V0,V1,V2]是单纯乘积∏中的2-单纯形(三角形),则考虑通过三元组的排序来定向的(可能被简并的)三角形(F(V0),F(V1),F(V2))。该有向三角形定义了法向量。
N=(F(V1)-F(V0))×(F(V2)-F(V0))
注意,如果F(V0)、F(V1)和F(V2)共线,则N可以为零。给定三角形τ=[V0,V1,V2],重数过程计算称为τ的重数的带符号整数。
在n=3的情况下,重数伪码可以如下给出:
输入:τ=[V0,V1,V2]
输出:multiplicity(τ)
N=(F(V1)-F(V0))×(F(V2)-F(V0))
int Mult=0;
For(τ的所有σ余面)
boolσ+=FALSE
boolσ-=FALSE
For(σ的所有顶点Vi)
if((F(Vi)-F(V0))·N>0)σ+=TRUE
if((F(Vi)-F(V0))·N<0)σ-=TRUE
EndFor
if(σ+)Mult=Mult+(-1)dim(σ)-3
if(σ-)Mult=Mult-(-1)dim(σ)-3
EndFor
Return Mult
注意,Mult变量计算中涉及的指数dim(σ)-3与3D外围空间的维度有关。在2D外围空间中,使用指数dim(σ)-2通过类似过程来计算线段的重数。更一般地,对于维度为n的“外围”空间,指数为dim(σ)-n。
在n=3的情况下,未优化的主过程伪码可以如下给出:
输入:轮廓C1(或P1)、迹线C2(或P2)
输出:多面体2-回路∑
∏=C1和C2的单纯复形乘积
∑=空多面体2-链
For(∏中的所有2-单纯形[V0,V1,V2])
int Mult=MULTIPLICITY([V0,V1,V2])
If Mult!=0
采用重数Mult将[F(V0),F(V1),F(V2)]添加到∑;
EndIf
EndFor
Return∑
为了使上述过程更直观且符合实际,现在考察其在图11~12的情况中如何适用。在该情况下,单纯复形Γ1是轮廓P1,即,L形多边形的三角剖分。其是2维单纯复形。单纯复形Γ2是迹线P2,即,对连续位置进行线性插值的折线。其是1维单纯复形。Γ1的三角形与Γ2的边的笛卡尔乘积是棱柱,而Γ1的边与Γ2的边的笛卡尔乘积是平行四边形。所述过程对这些乘积进行三角剖分,每个棱柱产生3个四面体,而每个平行四边形产生2个三角形,从而获得单纯乘积。图66示出了2个单纯复形,而图67示出了它们的笛卡尔乘积的三角剖分(四面体670、671、672、673、674、675)。
下面描述的三角剖分过程使该三角剖分具有一致性,这意味着棱柱分解产生的四面体的边界三角形必须与平行四边形分解产生的边界三角形一致。
一旦(例如,通过笛卡尔乘积三角剖分)计算了单纯乘积∏,就可以应用前面的过程S70。重数过程将单纯乘积∏的三角形用作输入。在图11-12的情况下,该乘积中存在3种三角形:三角形类型1(图68),来自于Γ1的三角形与Γ2的顶点的乘积;三角形类型2(图69),来自于将平行四边形分解成2个三角形,为Γ1的边与Γ2的边的乘积;以及三角形类型3(图70),来自于棱柱的分解,为Γ1的三角形与Γ2的边的乘积。在第一种情况中,如果顶点是迹线中的第一个或最后一个顶点,则每个这样的三角形是正好一个四面体的面,而对于其他顶点,是正好两个四面体的面。在第二种和第三种情况中(假定轮廓的三角剖分Γ1是无边界的流形),每个三角形是正好2个四面体的面。
乘积的每个三角形具有由其顶点通过F得到的像所给出的3D像。在该具体情况中,三角形的每个顶点是二元组(v1,v2),其中v1是轮廓Γ1的顶点,v2是迹线Γ2的顶点,其通过F得到的像就是F(v1,v2)=v1+v2。
如果3D空间中三角形的像不共线,则其定义有向平面,该有向平面是支持像三角形的平面并由三角形的方向来定向。对于该给定的三角形(见图71~73),S70中的重数过程考虑乘积∏中三角形的一个或两个余面四面体,并确定每个四面体第四个顶点相对于该定向平面的位置。
在图73中,当每个四面体的第四顶点730、731位于负的一侧时,重数过程将返回-2,因为系数(-1)dim(σ)-3=1。在图72中,当每个四面体的第四顶点720、721位于负的一侧时,重数过程将返回+2。在图71中,当一个四面体的第四顶点710位于正的一侧而另一四面体的第四顶点711位于负的一侧时,重数过程将返回0
主过程扫描乘积∏的所有三角形并在生成的链∑中插入具有相应重数的对应三角形。
实际上,大多数三角形具有零重数。为了加快主过程,可以使用外部法线信息将单纯乘积(或者更一般地,单纯复形)中的大多数三角形滤出。下面描述在图11~12的情况下优化该过程的一种可能方式。
注意,给定迹线的线段740,垂直于该线段740的单位向量741的集合是单位球面743上的大圆742(见图74)。两个连续线段746、747的圆744、745定义了单位球面上的扇形(见图75)。
在图76中,如果轮廓的三角形tP的法线不指向由垂直于与vT相邻的两个迹线线段的大圆所限定的扇形,则重数过程将tP与迹线的顶点vT的三角形乘积归为零索引。在图76中,标号760指示零重数,而标号761指示扇形外的法向量。
在图76和图77中,三角形tP的平面垂直于图的平面:这是将三角形tP画作线段以及其单位法向量包括在图的平面内的原因。此外,迹线(虚线)被包括在图的平面中。
类似地,如图78~80中所示,如果连接边eP相邻的轮廓的三角形与法线的大圆的弧与垂直于边eT的大圆不相交,则重数过程将该轮廓的边eP与迹线的边eT的平行四边形乘积的三角形部分归为零索引。
对单位球面应用定位结构(例如,四叉树),可以将其外部单位法线指向胞腔内的三角形的集合附接到该单位球面的每个胞腔。然后,分别对于迹线的每个线段和每个顶点,前面的说明允许分别恢复迹线线段集合和轮廓三角形集合,它们的乘积将生成非零重数三角形。该恢复通过扫描定位数据结构来执行。
输出的多面体回路如何表示扫描体
在许多情形下,输出的多面体回路提供了扫描体的表示。为了使这种表示更精确,描述了3种可以实际利用输出回路的一般情形(情形1、2、3)。注意,该一般过程在两个运算对象(轮廓和迹线)上是对称的,因此,在下面的情形中,可以交换运算对象C1和C2。
情形1在保持下面两个属性时发生:
-运算对象C1是没有回路的1维单纯复形。在图论中,该结构称为森林(或者,当被连接时称为树)。
-映射F:C1×C2→R3是关于第二参数的单射,换言之,对于C1中的任何a:
如果F(a,b1)=F(a,b2),则b1=b2。
在此情形下,输出回路Γ包含扫描体的边界(或者更一般地,建模对象的边界),并且可以是扫描体内部的一些另外的表面。当从扫描体外部的视角进行计算时,回路的图形绘制总是提供在视觉上扫描体的正确表示。此外,回路的绕数向扫描体提供从属谓词:当且仅当其关于Γ的绕数为正,不属于任何来自Γ的三角形的点空间位于扫描体内部。本方法提供了良好的图形绘制,即使存在另外的表面。本方法中不需要重新计算边界来删除边界内另外的表面。这减少了计算量并节省了资源。
情形2在保持下面两个属性时发生:
-运算对象C1是有向的组合3-维流形。
-对于运算对象C2中的任意点b,映射F(,b)为C1的四面体给出正的方向。即,对于C1中的任何有向3-单纯形[V0,V1,V2,V3],三个向量F(V1,b)-F(V0,b)、F(V2,b)-F(V0,b)和F(V3,b)-F(V0,b)的行列式是严格为正的,
det(F(V1,b)-F(V0,b),F(V2,b)-F(V0,b),F(V3,b)-F(V0,b))>0
情形3在C1是组合k1-维流形而C2是组合k2-维流形时发生,其中k1是奇数,而k2是偶数。在情形2或3中,与情形1一样,输出回路包含扫描体的边界(或者更一般地,建模对象的边界),并且可以是扫描体的内部的一些另外的表面。当从扫描体外部的视角进行计算时,回路的图形绘制总是提供在视觉上扫描体的正确表示。此外,回路没有歧义地确定扫描体的外表面。更准确地,输出回路产生的外部3D胞腔的边界是扫描体的外表面。针对情形1所公式化的相同说明应用于此。
情形1的一个实例是,迹线是可逆仿射变换集合中的1维分段线性曲线(例如,其顶点等距)并通过时间进行参数化:在该情形下的确是无回路的。
下面是更为具体的实例。为了计算两个多面体外层的Minkowski求和,考虑第一多面体的外表面与第二多面体的1-骨架(为边的集合)的Minkowski求和同第二多面体的外表面与第一多面体的1-骨架的Minkowski求和的并集是足够的。为了适用于情形1,通过单路径、树或森林来生成1-骨架是足够的。
下面是情形2的实例。假定运算对象C2是“多边形汤”。多边形汤是无结构的三角形和三角剖分块的集合,其可能具有非流形边和顶点。其近似地生成实体的边界,这表示除非是由于三角形之间的一些小的缝隙,否则其覆盖了该边界。记ε>0,以使得最大的缝隙不超过2ε。可以“治愈”该多边形汤,这将其转换成密闭的表示。首先,创建足够大的四面体或八面体C1,以包含半径为ε的球体。然后,计算C1和C2的Minkowski求和。该操作适合情形2,因为C1确实是3-维流形,并且与C2的Minkowski求和保持了四面体C1的方向。
情形3的实例如下。假定希望计算由2个变换参数族所定义的实体的所有像的并集。可以通过将2维参数空间三角剖分为组合二维流形C2来对变换族进行近似。还可以将实体三角剖分为组合3-维流形C1。如果变换以及它们关于参数的相关性足够光滑,可以使单纯形充分小,以获得对于准确映射的给定近似。该近似由在C1×C2上生成的分段线性映射乘以C1×C2的顶点的像来定义。注意,与情形2不同的是,不要求变换是保留方向的,特别地,变换可以在像的边界上发送内部的单纯形。
下面是情形3的另一实例。假定具有n个自由度的机器臂保持实体S。S的体扫描可以如下计算。首先将臂的配置空间三角剖分为组合n-维流形(可能是臂的每个联结的配置空间的三角剖分的乘积)。
如果n是偶数,则将S三角剖分为组合3-维流形。如果S由其外表面三角剖分来给出,则要求对实体进行三角剖分,这在S非凸时并非完全不重要的。另一选择是通过对于每个外表面顶点VS以距离ε>0创建内部顶点Vi,并且如果可能,以向量指向实体的内部,并且然后用薄三棱柱来代替将每个外表面三角形来对在增厚的外表面进行三角剖分。
如果n是奇数,则使用实体的外表面三角剖分。两种情况均适合情形3。图81描述了增厚的多边形及其三角剖分。
三角剖分,四面体化
作为获得单纯复形的实例,这里描述了用于对两个单纯复形C1和C2的笛卡尔乘积C1×C2进行三角剖分的一般过程,如图1中在步骤S30所示。下面的过程允许以一致的方式对乘积的任何子集进行三角剖分。更精确地,给定C1中的单纯形σ1以及C2中的单纯形σ2,三角剖分过程以下面的方式对笛卡尔乘积σ1×σ2进行三角剖分:如果C1中的σ′1和C2中的σ′2分别为σ1和σ2的面(其中可能为σ′1=σ1或者σ′2=σ2),则从σ′1和σ′2计算的三角剖分与从σ1和σ2计算的三角剖分相符。换言之,从σ1和σ2计算的是三角剖分的子复形。该过程然后允许“即时地”输出笛卡尔乘积三角剖分的子集,从而避免了对整个笛卡尔乘积进行高代价的三角剖分。
一致性条件依赖于两个任意给定的排序,一个针对C1的顶点集合,一个针对C2的顶点集合。给定C1中的n-单纯形σ1和C2中的m-单纯形σ2,这些单纯形的总的排序生成单纯形σ1和σ2的顶点的排序。使用该排序,将σ1和σ2表示为σ1=[x0,...,xn]以及σ2=[y0,...,ym],其中x0,...,xn和y0,...,ym分别是σ1和σ2的顶点的渐增序列。
采用两个输入单纯形σ1和σ2以及空单纯复形T来调用下面的三角剖分过程。该过程依次将(n+m)-单纯形添加到T。这些单纯形的面并未明确地添加到T。按照规定,它们被隐含地视为所生成复形的部分。
以下为递归三角剖分过程伪码。
TRIANGULATE([x0,...,xn],[y0,...,ym],T)
输入:σ1=[x0,...,xn],σ2=[y0,...,ym]以及空单纯复形T
输出:对笛卡尔乘积σ1×σ2进行三角剖分的单纯复形T
If n==0
将[(x0,y0),...,(x0,ym)]添加到T
Else If
将[(x0,y0),...,(xn,y0)]添加到T
Else
初始化空单纯复形T1
TRIANGULATE([x0,...,xn-1],[y0,...,ym],T1)
ForT1中的每个
将添加到T
EndFor
初始化空单纯复形T2
TRIANGULATE([x0,...,xn],[y0,...,ym-1],T2)
ForT2中的每个
将添加到T
EndFor
EndIf
下面说明了在三角形σ1=[0,1,2]和线段σ2=[3,4]的情况下的三角剖分过程的工作。为简明起见,顶点名称使用表示绝对排序的整数。递归过程首先定位至最深的调用层,直到两个输入单纯性之一是0-单纯形。图82描述了该步骤。
下一步骤(见图83)是在调用树的每个叶节点执行一单纯形与0-单纯形的简单乘积。得到的单纯形存储在T1和T2中。
然后,存储在T1和T2中的部分单纯形在上层进行组合(见图84)。
这将得到图85~87中示出的几何结构。从图85的左边到图87的右边:输入单纯形σ1=[0,1,2]和σ2=[3,4],笛卡尔乘积σ1×σ2(为棱柱),输出3个四面体的笛卡尔乘积的三角剖分T。
生成的单纯复形T由三个相邻的四面体定义。三角剖分过程的最后步骤是通过添加三角形、边和顶点来完成T的组合描述。该步骤不再进一步描述。
本发明可以有益地在一个或更多个计算机程序中实现,所述计算机程序可在可编程系统上执行,该可编程系统包括至少一个可编程处理器(其耦合来从数据存储系统接收数据和指令,并向数据存储系统发送数据和指令)、至少一个输入设备,以及至少一个输出设备。应用程序可以采用高级过程式编程语言或面向对象编程语言来实现,或者,如果需要,采用汇编语言或机器语言来实现;在任一情形下,所述语言可以是编译语言或解释语言。
通常,处理器将从只读存储器和/或随机存取存储器接收指令和数据。适用于有形包含计算机程序指令和数据的存储设备包括所有形式非易失性存储器,例如包括半导体存储设备,比如EPROM、EEPROM和闪存设备;诸如内部硬盘和移动磁盘这样的磁盘;磁光盘;以及CD-ROM盘。前述中的任何设备可由专门设计的ASIC(专用集成电路)进行补充或结合在其之中。
本申请描述了本发明的优选实施例。将要理解的是,在不偏离本发明的精神和范围的情况下可以做出各种修改。因此,其他的实现落入所附权利要求书的范围内。
虽然上面以朴素的方式对本文所描述的方法和例程进行了描述,但是出于教导的目的,显而易见的是,可以根据算法效率的考虑来设想改进。