背景技术
常用的三维几何体表示法是通过表面片元描述。表面围成的区域把几何体和外部空间区分开,在区域以内即在几何体内部。以下总结常见的表面表示方法
1)参数方程。举例半径为R,圆心坐标(X0,Y0,Z0)的球体表面的参数方程为
(x-x0)2+(y-y0)2+(z-z0)2=R2
2)多边形面片表示法。把几何体表面划分为不共面的多边形,记录每个多边形的顶点位置坐标、棱的拓扑关系和多边形对应顶点的索引号,即可完成对每个多边形的描述,进而完成对几何体表面的描述。注意这种方法不能精确描述曲面结构,必须把曲面近似划分成多边形面片。但只要划分的精度够高,足够满足工程应用的需求。
3)三角面片表示法。该方法是2)的特化,即2)中的单位面元是多边形,这里是三角形。因为三角面片结构简单,容易操作,又可以直接交付硬件(GPU)渲染。故三角面片表示法成为工程应用中最常用的表达方式。
在建筑算量中(不包含钢筋),算量人员的主要工作是依据规则计算出构件的体积或者面积。由于构件之间存在交叉重叠的关系,这些交叠部分的量(面积体积)需要扣去以避免重复计算,如果想要得到相交的几何体的几何量,一般通过以下方式实施,具体如下:
设被扣减的几何体为A,依据计算规则得到的被A扣减的几何体为B1,B2,则扣减后的几何体R为
R=A-B1-B2
应用三维布尔计算,A要相对于B1切割一次,判定,拣选面片,得到A-B1;再相对于B2切割一次,得到R。A总共被切割了两次。这只是单个计算的问题,考虑到实际算量中,单个构件通常情况下会参与到多个相关的扣减计算过程,形成如下所示的计算链:
A-B1-B2
C-B3-B1-B4
B1-B5-B6
上面的B1会在3个不同的计算链里面总共被切割4次。每次切割要重新生成新的顶点数据,这个过程无可避免地带来性能损失以及精度下降(本质是浮点数计算误差)的问题。切割次数越多,浮点数计算误差积累越大,精度问题越明显,越容易产生奇异数据,最终可能导致算法失效甚至崩溃。解决精度问题的一个可靠办法是采用更高精度的浮点数计算方法,但直接应用此算法的效率非常低,在实际应用中计算过程极其缓慢,不具备实用性。
另外,切割后产生的几何体表面情况复杂,面片数目多,且精度相对原始几何体也低。由于几何体不止经过一次切割,面片的数目增加,从而导致面片遍历的代价更大,切割出来的图形精度更低,势必影响以后每一步的计算稳定性和效率;另外由于新几何体复杂的表面情况,故而只能采取光线追踪或三维立体角判定法,从而导致速度缓慢而且非常容易出错。
现有其它三维布尔计算都是针对不同的三维几何体表示法而设计,大致分为以下几类:
1)CSG树表示。该方法把布尔计算表示为基础几何体的表达式组合,不直接计算和描述几何体的表面几何,该方法在纯粹计算几何量上有一定优势,但是用户如要交互地查看计算结果,必须转化成表面片元表示(因为显卡只支持表面片元结构),这个转化过程相当耗时,完全抵消掉其在计算效率上的优势,同时会带来更多的稳定性问题。故并不实用。
2)空间二分树表示。该方法利用平面来切割空间,两个平面的交可以描述一条线,三个平面的交可以描述一个顶点。通过对这个二分树的遍历完成计算过程。该方法的缺陷和1)类似,其数据结构不适应当前显卡的数据结构,需要通过计算和重新三角划分,其转换过程极其缓慢,故不实用。
发明内容
本发明目的在于,提供一种用于建筑算量领域的三维布尔计算方法,在提升稳定性的同时提升计算速度,而且能够对各个计算量的几何体进行实时三维渲染,故本发明具备实用性。
为解决以上技术问题,一种用于建筑算量领域的三维布尔计算方法,包括以下步骤:
(1)分析所有待计算的构件,得到表征待计算构件计算关系的扣减关系表达式;
(2)分析扣减关系表达式中的所有相关构件,得到它们对应的原始几何体以及原始几何体之间交叉重叠的信息;
(3)分析所有可能具有交叉重叠关系的原始几何体,计算出几何体之间所有的分割线;
(4)对于每一个原始几何体,按照分割线对该几何体进行一次性切割;
(5)对于切割后的几何体的所有面片,分析它相对于相关构件的原始几何体的位置关系;
(6)根据面片的位置关系,收集面片计算得到对应几何体;
(7)分析对应几何体,选取相应的公式计算出对应几何体的几何量。
所述步骤(1)中构件的扣减关系表达式是通过使用土建计算规则对待分析的构件进行计算得到的。
所述步骤(3)中分割线是根据基于表面片元表示的三维布尔运算方法计算得到的。
所述基于表面片元表示的三维布尔运算方法是通过对原始几何体实行假切割来获取原始几何体之间的分割线。
所述步骤(4)的切割方式是通过遍历每一个几何体的每一个面片,并按照记录的分割线切割每一个面片来进行切割的。
所述步骤(5)中面片的数据是通过借用高精度或者任意精度的浮点数计算方法来计算的。
所述步骤(6)中面片的拣选是采用过滤的方式来实现的。
所述步骤(6)中面片的收集计算是采用增量式的方式来计算的。
所述步骤(6)是通过采用公式:
来计算出对应几何体的。
所述步骤(6)是通过采用公式:
来计算出对应几何体的
与现有技术相比,本发明用于建筑算量领域的三维布尔计算方法,通过分析待计算的构件得到构件的扣减关系表达式,然后根据扣减关系表达式得到构件对应的原始几何体以及原始几何体之间的交叉重叠的信息,并对原始几何体交叉重叠关系进行分析并计算出原始几何体之间的切割线,根据切割线对原始几何体只进行一次切割,并且对切割后的几何体的所有面片进行分析得到每个面片相对于相关构件的原始几何体的位置关系,然后收集面片计算得到对应几何体,然后利用相应的几何算法计算工程量即可。这样可以看出本发明是通过采用延迟切割的策略对原始几何体只进行一次切割,减少了切割的次数;在此同时,利用增量公式结合原始几何体判断位置关系,在提高了整体计算的稳定性的同时提高了计算速度,并能依据现有的硬件设备良好的运行,可以显卡上实时渲染出计算结果,因此也具有实用性。
具体实施方式
为了使本领域的技术人员更好地理解本发明的技术方案,下面结合附图和具体实施例对本发明作进一步的详细说明。
在建筑算量中(不包含钢筋),算量人员的主要工作是依据规则计算出构件的体积或者面积。由于构件之间存在交叉重叠的关系,这些交叠部分的量(面积体积)需要扣去以避免重复计算。在引入计算机辅助算量之前,这部分工作一直都是由人工根据扣减规范手工计算(为方便手算,简化了的计算法则,结果不一定精确)。
在计算机介入算量部分之后,交叠关系的扣减很自然地通过三维布尔运算来表达。以下借助二维布尔计算来描述三维布尔运算的实际含义。布尔计算分为交∩,并∪,补-三种。
参见图1,A和B代表二维空间中的两个集合图形,通过二维布尔计算可以很方便得得到交叠(对应∩)和扣减(对应-)部分的二维平面几何图形,具体如下:
A∩B代表“即在A中,又在B中”的图形,即A和B的重叠部分。
A-B代表“在A中,且不在B中”的图形,即A独立于B之外的部分。B-A同理。
A∩B代表“在A中,或者在B中”的图形,即A和B的整体。
通过二维布尔计算可以很方便得得到交叠(对应∩)和扣减(对应-)部分的二维平面几何图形,这些图形的几何量(面积,周长等)可以根据公式精确地计算。
类似地,通过三维布尔运算可以得到交叠和扣减部分的三维几何体,它们的几何量(体积,表面积等)也可以根据公式精确计算。具体地,建筑算量中的所有扣减都可以描述为以下形式。设被扣减的几何体为A,依据计算规则得到的被A扣减的几何体为则扣减后的几何体R为
另,用户想知道A和某个B之间究竟发生了什么样的扣减?相交几何体是什么样子应该如何计算呢?A和第i个构件Bi相交并被扣除的几何体A∩Bi可以表达为
以上两个公式描述了算量领域最主要的计算需求(其它没有扣减关系的计算依照规则公式计算即可,相对简单)。
另外,常用的三维几何体表示法是通过表面片元来进行描述。表面围成的区域把几何体和外部空间区分开,在区域以内即在几何体内部。以下总结常见的表面表示方法
1)参数方程。举例半径为R,圆心坐标(x0,y0,z0)的球体表面的参数方程为
(x-x0)2+(y-y0)2+(z-z0)2=R2
2)多边形面片表示法。把几何体表面划分为不共面的多边形,记录每个多边形的顶点位置坐标、棱的拓扑关系和多边形对应顶点的索引号,即可完成对每个多边形的描述,进而完成对几何体表面的描述。若需要描述曲面结构,则需将曲面近似划分成多边形面片,将划分的精度提到相应的高度,就足够满足工程应用的需求。
3)三角面片表示法。该方法是2)的特化,即2)中的单位面元是多边形,这里是三角形。因为三角面片结构简单,容易操作,又可以直接交付显卡(GPU)渲染。故三角面片表示法成为工程应用中最常用的表达方式。
以下借助二维布尔计算算法步骤来描述三维布尔运算的算法步骤,下面对二维布尔计算算法步骤进行叙述,具体如下:
参见图2,图形A和图形B有交叉重叠的部分,求他们的相交重叠的图形,即A∩B。
参见图3,首先将图形A和图形B的相交部分打断(黑色圆点),这样A的每条线段相对于图形B只有三种位置关系:在图形B中,在图形B上和在图形B外;同理,图形B的每条线段相对于A也只有三种位置关系。根据打断的位置,可以获取图形A的每条线段相对于B的位置关系和图形B的每条线段相对于图形A的位置关系。
参见图4,选取图形A在图形B中和图形B上的所有线段,以及图形B在图形A中和图形A上的所有线段,组成一个新的图形,即A∩B。
若假定参与布尔计算的几何体A和几何体B,布尔运算 代表交,并,差任意一种计算。与上述的二维布尔计算方法类似,基于表面片元表示的三维布尔运算可以分为以下步骤:
1)切割。将几何体A沿着与几何体B相交的曲线切割几何体A的面片;再将几何体B沿着与几何体A相交的曲线切割几何体B的面片。这样几何体A的每个面片相对于几何体B的位置关系只可能有4种情况:在几何体B内部,在几何体B外部,在几何体B上,在几何体B上可以进一步细分为共面或者反面。同理几何体B的每个面片相对于几何体A的位置关系也只可能有4种。
2)位置关系判定。对于几何体A的每个面片,判断其相对几何体B的位置关系。同理,对于几何体B的每个面片,判断其相对几何体A的位置关系。
3)拣选。依照下表拣选几何体A和几何体B适合的面片,组成新的几何体(a代表几何体A的面片,b代表几何体B的面片)
本发明一种用于建筑算量领域的三维布尔计算方法是通过基于表面片元表示的三维布尔运算来计算被切割后几何体的几何量,具体步骤如下:
(1)分析所有待计算的构件,得到表征待计算构件计算关系的扣减关系表达式;
计算开始前,按照计算规则分析所有待计算的构件,形成如(即公式(1))的计算任务,即得到了待计算构件几何关系的扣减关系表达式。
(2)分析扣减关系表达式中的所有相关构件,得到它们对应的原始几何体以及原始几何体之间交叉重叠的信息;
根据得到的待计算构件的扣减关系表达式,得到构件对应的原始几何体,然后根据原始几何体以及扣减关系表达式分析出所有关系对(Ai,Aj),它代表(Ai,Aj)之间可能会相互切割,即得到所有可能具有交叉重叠关系的原始几何体信息。例如对于扣减关系表达式A1-A2-A3,分析得到关系对(A1,A2),(A1,A3),(A2,A3),将所有的关系对进行记录。
(2)分析所有可能具有交叉重叠关系的原始几何体,计算出几何体之间所有的分割线:
从步骤(2)获取了所有可能具有交叉重叠关系的几何体的信息,形成几何体之间可能会相互切割的关系对(Ai,Aj),根据基于表面片元表示的三维布尔运算方法,将几何体Ai沿着与几何体Aj相交的曲线切割几何体Ai的面片,并计算出Ai的所有面片ai相对于Aj的分割线;同理也可以计算出Aj的所有面片aj相对于Ai的分割线,将所有的分割性记录下来。
(4)对于每一个几何体,按照分割线对该几何体进行一次切割:
对于每一个几何体Ai,通过遍历Ai的每个面片ai,把ai按照其记录的分割线将其切割成新的面片a′i,这样实际上把切割问题归结为带约束的多边形的划分问题,通过借用高精度或者任意精度的浮点数计算方法解决数据精度的问题。
(5)对于切割后的几何体的所有面片,分析它相对于相关构件的原始几何体的位置关系:
根据选取需要的被切割后的几何体A′i,根据A′i是Ai中一部分,根据步骤(1)可以计算得到所有与Ai有交叉重叠关系的几何体,即(Ai,Aj),然后根据基于表面片元表示的三维布尔运算方式判断A′i中的每一个面片a′i相对于Aj的位置关系,将所有的位置关系记录下来。
(5)根据选取的几何体,收集面片计算得出几何体的各种参数:
面片的拣选可以看作过滤过程,采用一种增量的方法来计算,首先通过符号定义,令a(n-1)代表N-1次扣减后属于几何体A并且未被“过滤”的面片,同时又令aiA表示a在几何体A的内部,aoA表示a在几何体A的外部,asA表示a与几何体A共面,apA表示a与几何体A反面。同时令“|”代表“或者”的含义,则每个中间步骤的结果可以用下面的公式表示,具体如下:
收集面片之后利用上述公式(3)或者(4)进行计算就可以得到对应的几何体。
(6)分析对应几何体,选取相应的公式计算出对应几何体的几何量:
通过分析对应几何体之后,就会得到对应几何体在CAD上具体参数。若想要得到该几何体的面积,周长和体积等几何量,只需要将该几何体的参数代入计算几何量的公式中进行运算,即可得到。
上述用于建筑算量领域的三维布尔计算方法,通过记录几何体切割的分割线,然后根据记录的分割线对几何体只进行一次切割,减少了切割的次数,从而提高了三维布尔计算方法的计算速度。另外,与现有技术相比,本发明通过收集面片并利用上述公式(3)或者(4)进行计算就可以得到对应的几何体,分析对应几何体就可以得到该几何体的参数,然后采用相应的计算几何量的公式就可以计算出几何体的几何量,计算量少,从而减少了硬件的负荷,提高了运算的稳定性。
参见图5,上面对本发明用于建筑算量领域的三维布尔计算方法进行叙述,下面是将所述三维布尔计算方式进行具体计算的工作过程,具体如下:
S101、确定选中的构件:
利用鼠标、键盘和触摸屏等媒介来选取需要的构件,然后分析选取的构件得到与选取构件相关的其它构件。
S102、分析构件得到构件的扣减关系表达式:
根据土建计算规则,分析选中的构件和哪些可能发生扣减的构件相交,并根据土建计算规则得到类似A-B-C这样的关系式,即得到了构件几何关系的扣减关系表达式。
S103、得到构件对应的原始几何体以及他们之间的交叉重叠关系:
通过分析构件几何体关系的扣减关系表达式式得到构件对应的原始几何体,再次分析扣减关系表达式和原始几何体,得到原始几何体之间的交叉重叠关系。例如扣减关系表达式为A-B-C,则原始几何体为A、B和C,原始几何体之间交叉重叠关系为(A,B)、(A,C)和(B,C)三种。
S104、计算出原始几何体之间的所有分割线:
通过原始几何体之间交叉重叠关系,计算出原始几何体之间的所有分割线,只对分割线进行记录,不切割面片。比如根据(Ai,Aj)这样的关系对,把Ai的所有面片ai相对Aj求得分割线,并记录所述分割线;同样把Aj的所有面片aj相对Ai求得分割线,并且进行记录。
S105、根据分割线对每一个原始几何体进行一次性切割:
根据记录的所有的分割线,对原始几何体进行一次性切割,然后遍历原始几何体的每个面片,把原始几何体的每一个面片按照其记录的分割线将其切割成新的面片。
S106、分析出切割后几何体的所有面片相对于相关构件的原始几何体的位置关系:
比如若选中的几何体为A′i,通过分析几何体A′i得到几何体A′i的原始几何体Ai,然后分析包括Ai的所有关系对(Ai,Aj),判断A′i的每个面片a′i相对于Aj的位置关系,并且对判断出的结果进行记录,通过这种方法得到切割后几何体的所有面片相对于相关构件的原始几何体的位置关系。
S107、收集面片利用相应公式计算出对应几何体:
依据选择的几何体A′i收集属于所述几何体A′i的所有的面片,然后根据选择的几何体确定采用公式(3)还是公式(4)来计算出对应几何体。
S108、分析对应几何体获取参数:
分析对应几何体,就可以得到对应几何体在CAD上所处的坐标位置,根据坐标位置就可以得到对应几何体的所有参数。
S109、利用相应的公式计算几何体的几何量:
将对应几何体的参数代入相应的计算几何量的公式中,就可以得到对应几何体的几何量。
综上所述,与现有技术相比,本发明用于建筑算量领域的三维布尔计算方法,通过先记录分割线,最后汇总这些分割线一次性切割,把切割问题归结为带约束的多边形划分问题,由于只对原始几何体进行一次切割,从而提高了数据的精度的同时也提高计算的速度;另外原始几何体被切割之后,通过结合原始几何体做增量式的面片拣选,这样不仅促使计算量减少,还没有重复计算,进一步提高了计算的速度,从而减少了硬件的负荷,提高了系统的稳定性;另外在现有硬件条件下,可以显卡上实时渲染出计算得到的几何体。
以上仅是本发明的优选实施方式,应当指出的是,上述优选实施方式不应视为对本发明的限制,本发明的保护范围应当以权利要求所限定的范围为准。对于本技术领域的普通技术人员来说,在不脱离本发明的精神和范围内,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。