任意多边形坡屋面屋脊线生成方法
2019-12-26郑华海
郑华海
(1.上海同济绿建土建结构预制装配化工程技术有限公司,上海 200092; 2.同济大学国家土建结构预制装配化工程技术研究中心,上海 200092)
1 前言
目前,建筑领域的设计已从抽象的二维设计逐步向具象的三维设计转变。传统的建筑二维化设计对设计人员的素质要求较高,需要具备高度的空间想象能力,设计完成的二维图纸也只有经过训练的专业人员才能读懂理解。由于二维图纸的抽象性,即使是经过训练的专业人员也避免不了在图纸的绘制及理解上出错。近十几年,随着BIM技术被引入建筑领域,三维化的设计已变得越来越重要[1-2]。坡屋面是一种常见的屋面形式,建筑屋面由于排水以及建筑立面美观的需要,往往将屋面做成坡屋面。BIM软件特别是方案展示、建模、算量等BIM软件,生成坡屋面是一个完整的软件所不可缺少的重要功能。
2 研究现状
关于屋脊线生成方法,已有部分研究者做了一定探索[3-7]。郁海军[8]阐述了同坡坡屋面的屋檐多边形、屋面交线、交线倾角、屋面顶点、屋面多边形的特征及正投影图的画法。吴明珠[9]对以等高的直屋檐和等坡的平屋面为条件的同坡坡屋面交线的特征及作法进行了深入研究。袁昌富[10]等人对相邻檐口线夹角为直角、檐口线平行的等坡坡屋面形式,提出一种求解该屋面交线的方法(45度偏转法)。文辉[11]提出虚、实结合,高、低屋脊等概念,从而找到了一种求同坡屋面交线简捷而有效的方法。陈宇军[12]提出了一种非常简明有效的递归算法,该算法主要基于试探性的解题路线和屋脊线无交叉的有效性判断准则。李至平[13]提出了自动生成坡屋面的算法并编程实现。王飞[14]等人提出了一种基于多边形骨架线自动生成简单房屋模型的算法。上述方法基本是适用于特定条件下的坡屋面,如两两檐口线夹角是直角,对于两两相邻檐口线夹角是任意角度的坡屋面仍然无法解决。
如今市场上被广泛使用的带有坡屋面生成功能的软件有斯维尔、广联达、鲁班、天正、Revit等。斯维尔及鲁班软件没有相应的坡屋面板建模功能,只能通过传统的手工建模,将平板变斜得到坡屋面板[15-16]。广联达软件先创建整个平屋面板,然后导入画好屋脊线的CAD图纸(此屋脊线无法自动生成,需要人工预先画好),再运用楼板分割命令在屋脊线处对平屋面板进行分割,最后调整每块屋面板的坡度从而形成正确的坡屋面[17]。斯维尔、广联达、鲁班软件虽然可以通过某种方法得到坡屋面,但是这些方法对软件操作者要求极高,并且生成坡屋面的效率低。天正软件以及Revit软件能够让用户通过选取檐口线并输入参数快速生成坡屋面,但是该功能为天正及Revit软件核心部分,作为商业软件其坡屋面的生成方法不可能对外公开。
为此,本文探讨了一种坡屋面生成方法,该方法可以基于任意多边形生成等坡坡屋面。
3 坡屋面
坡屋面是比较常见的一种屋面形式,被广泛应用在低多层建筑中。当代建筑屋面依据排水需要以及建筑的立面美观,也往往将屋面做成坡屋面。
图1 坡屋面示意图
图2 多边形类型
坡屋面的任一坡面由若干条屋脊线及檐口线围合而成,多个坡面首尾相连形成完整的坡屋面,如图1所示。屋脊线是排水方向不同的坡面相交而形成的线,也叫分水线,分为阴脊线(内凹的线)和阳脊线(外凸的线)。其中,处于建筑屋顶最高处的阳脊也叫正脊,它是由两个不相邻的坡面的交线,并且不和屋檐线相交。
3.1 坡屋面形式
在投影视图中,正脊线表现为檐口线的内缩,即多边形的边沿着角平分线以恒定速度内移,汇聚成为点或者更短的边。根据屋脊正脊线的特点,把坡屋面分成四种类型,如图2。
图2(a)所示的坡屋面的正脊线有起点和端点,所有正脊线连成多段线。图2(b)所示的坡屋面的正脊线首尾相连形成闭合的多边形,没有确定的起点和端点,这类多边形为环形多边形。图2(c)所示的坡屋面的正脊线不像图2(a)具有起点和端点,也不像图2(b)相连形成闭合的多边形,而是在某处断开分成两段。图2(d)所示的坡屋面的多条屋脊线交于同一点,即正脊线长度为零。这类坡屋面具有正多边形的性质,如果把这些相交于同一点的相邻屋脊线的另一端点首尾相连,可得到正多边形或正多边形的一部分。
除了上述基本的四种类型,还可由这四种基本类型组合形成其他复杂的坡屋面。
3.2 屋脊线特点
(1)过任意两两相邻的檐口线的坡面的交线的投影必定是该两条相邻檐口线夹角的角平分线;
(2)如图3所示,如果过任意的两条檐口线的等坡坡屋面有交线(屋脊线),则该交线必定是正脊线,其投影线必定与该两条檐口线夹角的角平分线重合;
(3)相交于一点的屋脊线数量大于等于3;
(4)完全相同的檐口线,其坡屋面的解不唯一,如图3(a)、(b)。图3(a)、(b)为檐口线完全相同的等坡坡屋面,但可以作出两种不同的坡屋面。图3(a)称为相交坡屋面,图3(b)称为相贯坡屋面。
4 坡屋面生成方法
下面以图4所示的任意多边形为例,阐述等坡坡屋面生成方法。图4(a)为该任意多边形; 图4(b)为任意多边形屋脊线在由檐口线组成的平面上的投影效果。其中,实线是檐口线,虚线和点划线是屋脊线,即虚线是相邻坡面的交线(阳脊线或阴脊线),点划线不相邻坡面的交线(正脊线)。
图3 屋脊线示意图
图4 任意多边形
任意多边形屋脊线的生成流程可以用图5的流程图表示。
图5 屋脊线生成流程图
由于实际的屋脊线与其在由檐口线组成的平面上的投影具有相似性,因此将坡屋面生成方法分为两大步骤。首先确定屋脊线,其次再确定屋脊线的高程。
下面是确定屋脊线的主要步骤。
(1)确定第一三角形(如图4中的ΔFG2)
第一三角形坡面由一条檐口线和两条非正脊线的脊线(阳脊或阴脊)围合而成,该两条非正脊线的脊线的交点即为整个坡屋面正脊线的起点。由图2可知,除图2(b)环形屋面以外,其他坡屋面正脊线的起点大于等于2。图2(d)是多个起点重合的情况。确定第一三角形坡面可按以下步骤进行。
①作相邻檐口线夹角的角平分线,如图6(a);
②延长角平分线,得到相邻两夹角的角平分线交点(注意是相邻角平分线交点,如Aa与Bb的交点,Dd与Ee的交点,而不是Aa与Cc的交点)。
(a)
(b)图6 两两相邻角平分线交点
③找到相邻两交点到相应边距离最小的点,该点即为正脊线起点(由于坡面以檐口线开始向上延伸,距离檐口线越远的点,其在高程的坐标值越大,所以距离最短的点是正脊线的起点)。如图7(a),角平分线Ff与Gg相交于点2,角平分线Gg与Hh相交于点3,由于线段22′=22"小于线段33′=33"的长度。因此ΔEF1、ΔFG2、ΔGH3的交点为点2,即ΔFG2是第一三角形。
如果交点位于由檐口线围合而成的封闭多边形以外,如图6(b)所示的圆圈内的点,则视该点到其相应边的距离无限大,即如果位于封闭多边形以外的点和封闭多边形以内的点比较,保留封闭多边形以内的点。因为如果等坡坡屋面的脊线,向由檐口线围成的平面投影,脊线必定在该平面以内。
④同理,遍历所有交点,可以得到图7(b)所示的其他第一三角形ΔIJ4、ΔLM5、ΔAB6、ΔCD7。
(a)
(b)图7 判别正脊线起点
⑤判断第一三角形的正确性。下面以判断真第一三角形ΔIJ4和假第一三角形ΔLM5为例,阐述判断的方法。
判断ΔIJ4。ΔIJ4的真假取决于过与檐口线IJ相邻的檐口线HI或JK的坡面的正脊线是否切割ΔIJ4。
Ⅰ 与三角形IJ4的檐口线相邻的檐口线是HI(或JK),可能切割ΔIJ4的正脊线在过檐口线是HI(或JK)的坡面上,而不是过檐口线HI、JK的坡面的交线。
Ⅱ 过点4的正脊线往左侧与Dd相交,往右侧与Ee相交,因此该正脊线是过檐口线HI的坡面与过檐口线DE的坡面的交线,如图8中的虚线。
Ⅲ 该正脊线(图8的虚线)并没有切割ΔIJ4,说明ΔIJ4是正确的第一三角形。
判断ΔLM5。同理,三角形LM5的真假取决于过与檐口线LM相邻的檐口线MA或KL的坡面的正脊线是否切割切割ΔLM5。根据上述方法,作出的正脊线如图8所示的点划线。可见,点划线将ΔLM5切割,即ΔLM5不是正确的第一三角形,应该排除。
图8 判断第一三角形正确性
同理,判断其他的三角形,最后得到正确的第一三角形如图9所示。即只有ΔAB6、ΔFG2、ΔIJ4是正确的第一三角形。
图9 确定的第一三角形
(2)作出正脊线
第(1)步确定了3个第一三角形ΔAB6、ΔFG2、ΔIJ4,即确定了正脊线的3个起点(终点)。下面以点2为起点作为例子阐述正脊线的生成方法。
①找出过点2的正脊线的坡面。由于两个面相交形成线,因此该正脊线对应的坡面有两个,也即需要找到两条檐口线。该坡面与第一三角形ΔFG2相邻,即过檐口线EF、GH的坡面。
②过起点2作正脊线,即过檐口线EF、GH的坡面的交线。由于是等坡屋面,所以正脊线也是檐口线夹角的角平分线。该平分线必定通过EF和GH延长线交点以及点2。同理,也先作出过其他起点的正脊线,如图10中的虚线。
图10 作第一条正脊线
因为,如图11,线段AB与BC交于B点,线段BC与CD交于C点。OB是∠ABC的角平分线,OC是∠BCD的角平分线,OB与OC交于O点。O1、O2、O3分别垂直于线段AB、BC、CD,根据角平分线定理,可知O1=O2、O2=O3,所以O1=O3,又因为O1、O3分别垂直于AB、CD,所以OO′是∠A O′C的角平分线。
图11 角平分线证明
③延长上述第②步的角平分线,使其与相邻檐口线夹角角平分线相交,如图12。那么过檐口线GH的坡面的正脊线即为2h,正脊线2h也是过檐口线EF的坡面的一部分正脊线。
图12 作正脊线2h
④作过点h的正脊线。由于过点h的正脊线向外延伸,与角平分线Ee相交,(或与过点4的正脊线相交),因此过点h的正脊线应该是过檐口线HI、EF的坡面的交线,如图13所示的虚线。正脊线he与Ee交于点e,即过檐口线EF的坡面的正脊线是线段2he。
图13 作正脊线he
⑤同步骤④,作出其他的正脊线。最后,所有的正脊线如图4(b)所示。
至此,作出了所有的脊线。
接下来确定屋脊线的高程,即算出所有正脊线端点的高程坐标。
(3)过所有正脊线的端点,作其对应边的垂线(图14),并算出垂线的长度。
图14 确定投影距离 图15 确定正脊线高程
(4)以点2为例,计算其高程。如图15,第(3)步已经算出垂线的长度X,又因为坡屋面的坡度α已知,则点2的高程Z2=X·ctgα。
(5)同理,求出其他所有正脊线端点的高程。
至此,坡屋面生成完毕。
图16 环形坡屋面生成
图17 任意多边形屋脊线生成步骤
对于檐口线围成的区域为环形的情况,如图16(a)。首先在内环(或外环)上任取一点,从该点出发连接外环(或内环)上的任一点,使从该点出发的线段最短。按此方法确定的线段将环形分割,改线段可视为檐口线,如图16(b)。 按照本文第4部分的方法作出角平分线,并做出正脊线,如图16(c); 延长正脊线使其与分割环形的檐口线部位的真实角平分线相交,如图16(d); 最后,连接正脊线首尾,得到最终的环形正脊线,如图16(e)。
5 案例
下面以图17(a)所示的任意多边形为例,说明任意多边形屋脊线生成步骤,并检验本文提出的任意多边形屋脊线生成方法的正确性。可见,该多边形与图2(c)一样,正脊线都在某处断开分成两部分。
(1)作出所有角平分线,并求出相邻角平分线交点,得到可能的第一三角形,如图17(b)。
(2)判断第一三角形正确性。如图17(c),第一三角形的前后正脊线均没有和第一三角形的边(两条角平分线)相交,说明第一三角形即为图17(b)所确定的。
(3)选择最左侧的第一三角形作为正脊线起点,作出第一条正脊线,如图17(d)。
(4)作下一条正脊线,与其他两条正脊线(这两条正脊线是以另外的两个第一三角形作为正脊线起点而得的正脊线)交与一点,如图17(e)。
(5)第(4)步得到三条交于一点的正脊线之后,从该交点出发的正脊线应由图17(e)虚线框的檐口线确定,由于该两条檐口线共线,无法确定交点,则无法作出角平分线,故选择其他第一三角形作为正脊线起点,找出剩余正脊线。
(6)以图17(b)最右侧的第一三角形作为正脊线起点,作出正脊线,如图17(f)。
(7)第(6)步得到正脊线之后,从该条正脊线左端点出发的正脊线也应由图17(e)虚线框的檐口线确定; 同理,由于该两条檐口线共线,无法确定交点,则无法作出角平分线。
(8)至此,以所有的第一三角形为正脊线起点均已做出了正脊线,则所有正脊线生成完毕。
6 结语
目前,建设行业对BIM及其软件的需求量极大,由于旺盛的市场需求,国内不少企业正在开发相关BIM软件。由于商业软件对其软件产品坡屋面生成方法的保密性,开发人员无法获得。本文提供了一种任意多边形坡屋面的生成方法,可作为开发BIM软件的相关功能提供理论参考。在运用本方法生成屋脊线需要注意以下几点:
(1)生成屋脊线之前首先要判断檐口线围成的区域是否是环形;
(2)该方法的关键在于确定第一三角形,得到正脊线的起点(终点);
(3)正脊线的起点(终点)是相邻的檐口线夹角角平分线的交点,该交点需同时满足“到相应边的距离最短”以及“前(或后)正脊线不切割该第一三角形”两个条件。