BIMBase之python建模宝典建筑表皮与泰森多边形
▲ 点击上方蓝字,关注PKPM构力科技
BIMBase自从2021年发布以来获得了众多关心国产BIM和业务数字化转型的圈内老法师的关注,除了是国内首款完全自主知识产权的BIMBase系统 ,实现建筑信息模型(BIM)关键核心技术自主研发安全可控。
同时开创了BIM X PYthon的技术跨界混搭风 ,得以让建模可以通过快速编程实现。
So!
BIMBase团队为了在功能和场景上
帮助大家了解BIMBase
学习建模小技巧
开设了技术专栏
【BIMBase之python建模宝典】
今日分享第二十三弹
建筑表皮与泰森多边形
BIMBase建模宝典第23期
1.1
遇见-泰森多边形
泰森多边形,或称冯诺伊图,作为高速发展的计算机技术在建筑领域的典型应用设计之一,已广泛应用于计算机图形学、气象规划、建筑幕墙设计等诸多领域。其仿生性为仿生建筑带来了设计方法与可能性,使设计师不再拘泥于场地等级划分,以迭代和拓扑原则打破传统规律性的布置理念,达到贴合实际、模拟自然的效果。
经过长时间的发展,泰森多边形也逐渐从二维拓展到三维,从表皮演变到空间形态。如今,国内外已有较多建筑案例以泰森多边形为原型,无论是北京水立方,还是杭州运河大剧院,都能发现它的影子。
图1 泰森多边形实例
1.2
定义-泰森多边形
泰森多边形是一组由连接两邻点线段的垂直平分线组成的连续多边形。
BIMBase的pyp3d几何建模模块和scipy科学计算模块高效结合,在BIMBase二次开发中,轻松建立泰森多边形模型,合理发挥参数化设计在精度调节及细节设计上的优势、可视化过程在实时反馈和动态调整上的优势。用户可根据需要通过调整离散点数量、限制离散点间距等措施得到满意的泰森多边形图形。
凭借上述创建方式,使得泰森多边形具有以下特征:
▶ 每个泰森多边形内仅含有一个离散点数据;
▶ 每个泰森多边形内的任意点到相应离散点的距离最短;
▶ 每个泰森多边形边上的任意点到其两边的离散点距离最短;
▶ 每个泰森多边形的边数等于内部随机点相邻三角形数目。
图2 泰森多边形创建流程
图3 建筑表皮三维效果图
Pyp3d和科学计算库的融合
BIMBase建模宝典第23期
2.1
赋能随机·变幻的一切
二次开发和各类扩展包的碰撞,不断解锁着BIMBase建模的更多可能。Numpy库自带的随机功能函数np.random.rand(),赋予了模型尺寸、位置、颜色随机的数值。用随机的方式生成泰森多边形的原始位置点,复杂问题得而放开处理,既简便又多元,解决了原始位置点位置要求问题且展现了在一切可能之下的软件建模能力。
图4 随机加成的泰森多边形
2.2
借助力量·强大的科学计算
Scipy扩展包提供了多种成熟快速的科学问题算法,对于泰森多边形的划分亦有优化的解答。借助空间相关问题模块Scipy. Spatial中的Voronoi()函数,一行代码便从随机点集收获成型的泰森多边形。Scipy的引入带来了建模功能强大、运行流畅、代码简便、逻辑流畅的丝滑体验。
图5 各多边形独立处理生成
2.3
深入拆解·强强结合
Python二次开发带来了各式各样的工具,同时也带来了深入理解这些工具内在本质的机会。Voronoi()函数生成的泰森多边形结果,是Scipy扩展包的专属内置类型。我们则撰写了自定义函数get_voronoi_geo(),在其中拆解泰森多边形,像握着手术刀一般提取建模所需的几何参数,为我所用。天生强大的BIMBase和各类开发扩展有机结合,需要用户不断地深层次理解和利用,同样在用户不断深入了解中,展示更多维形象、化无形于有形。
图6 多扩展包结合效果
获取图形参数的教程
BIMBase建模宝典第23期
图7 代码架构图
如前述,scipy库中的spatial.Voronoi()函数构建的泰森多边形是一个专属类型,不能直接为Pyp3d建模所用。自定义函数get_voronoi_geo()的任务是深入这个专属类型,提取出泰森多边形每一个节点坐标,再由点生面,拉伸出体。
断点监视泰森多边形类的内部存储形式,发现其中以下2个属性十分重要:
属性
说明
points
一维数组,存储各多边形的标号,标号随机生成
regions
二维数组,存储各多边形的组成点的标号。含有标号为-1则证明不能闭合成形
vertices
二维数组,按标号顺序存储各多边形组成点的坐标值
表1 Scipy内泰森多边形关键属性
按照泰森多边形标号points顺序循环,遍历regions标号组,将不包含-1的即闭合可绘制的多边形组保留。再按照其组成点标号,在对应的vertices中兑换组成点坐标。成型的泰森多边形的点坐标参数便提取出来了。
图8 初始位置点个数对多边形成型效果的影响
参考上图,目前得到的泰森多边形要比期望得到的包围盒尺寸要大,并且原始位置点个数较小时还会出现填不满的情况。只需要再遍历各点尺寸,将超出包围盒的点设定为包围盒上即可。最后逐个多边形拉伸成体,赋予随机颜色。
图9 包围盒收敛多边形
新定义函数能够将spatial.Voronoi()函数获得的多属性结果导入所设置键内,并对泰森多边形的顶点坐标进行修正以及对二维平面图形进行三维拉伸,形成更美观的建筑表皮模型,提供更合理的视觉显示效果。