文章目录
球面网壳和柱面网壳的参数化生成
引言
Rhino是广泛使用的三维建模软件之一,其插件Grasshopper则为用户提供了一种更加灵活、参数化的建模方式。在本文中,我们将介绍如何在Grasshopper平台下对球面网壳和柱面网壳进行参数化生成。
网壳是一种极其轻量化的结构,其几何形态与力学性能之间存在密切的关系,因此对于不同条件下的设计参数进行模拟、分析和优化是至关重要的。参数化建模正是利用计算机程序对于复杂模型进行快速建模、仿真和优化的重要工具。
工程中常用规则形状网壳包括球面网壳和柱面网壳,顾名思义,
球面网壳的形状呈球型
柱面网壳的形状为圆柱形。
本文主要介绍常见球面网壳和柱面网壳的参数化生产方法。
球面网壳参数化生成
球面网壳介绍
球面网壳的几何尺寸由跨度、矢高确定。划分参数包括环向划分段数、径向划分段数。常见的球面网壳划分形式有:凯威特型、肋环型、联方型、施威德勒型以及三向网格型。球面网壳各类划分较为简单,首先根据圆心角等分的方式,计算得到所有点的坐标;然后针对不同的类型,编写相应的拓扑关系,得到网壳形状。
球面网壳具有不同种网格划分类型,如下图。
生成效果
代码
凯威特球面网壳
///计算半径
double l;
f = Math.Min(f, l / 2);
double r;
r = (l * l / 4 + f * f) / 2 / f;
Point3d movept = new Point3d(0, 0, -r + f);
basept = basept + movept;
///Print(r.ToString());
///计算中心角
double angle,unit_angle;
angle = Math.Asin(l / 2 / r);
unit_angle = angle / m;
///Print(angle.ToString());
///Print(unit_angle.ToString());
///生成点
List<Point3d> mypts = new List<Point3d>();
mypts.Add(new Point3d(0, 0, r) + basept);
double angle_xy;
double angle_z;
double len_xy;
for (int i = 1;i < m + 1; i++)
{
///Print(i.ToString());
for (int j = 0;j < i * n; j++)
{
angle_xy = 1.0 * j / (1.0 * i * n) * 2.0 * Math.PI;
///Print(angle_xy.ToString());
angle_z = 1.0 * i * unit_angle;
len_xy = r * Math.Sin(angle_z);
mypts.Add(new Point3d(len_xy * Math.Cos(angle_xy), len_xy * Math.Sin(angle_xy), r * Math.Cos(angle_z)) + basept);
}
}
/// 生成直线
List<Line> lines = new List<Line>();
int st,ed;
/// 定义径向杆件
for (int i = 1;i < n + 1; i++)
{
lines.Add(new Line(mypts[0], mypts[i]));
}
for (int i = 1;i < m; i++)
{
st = (n + n * (i - 1)) * (i - 1) / 2 + 1;
ed = (n + n * i) * i / 2 + 1;
for (int j = 0;j < n;j++)
{
lines.Add(new Line(mypts[st], mypts[ed]));
st += i;
ed += i + 1;
}
}
int temp;
///定义其他杆件
for (int i = 1;i < m; i++)
{
st = (n + n * (i - 1)) * (i - 1) / 2 + 1;
ed = (n + n * i) * i / 2 + 1;
int n1 = st;
int n2 = ed;
//Print(st.ToString());
//Print(ed.ToString());
for (int j = 1;j < n + 1; j++)
{
for (int k = 1;k < i + 1; k++)
{
lines.Add(new Line(mypts[ed + k], mypts[st + k - 1]));
temp = st + k;
if (temp == n2)
{
temp = n1;
}
lines.Add(new Line(mypts[ed + k], mypts[temp]));
}
st += i;
ed += i + 1;
}
}
///定义环向杆件
for (int i = 1;i <= m; i++)
{
st = (n + n * (i - 1)) * (i - 1) / 2 + 1;
ed = (n + n * i) * i / 2;
for (int j = st;j < ed;j++)
{
lines.Add(new Line(mypts[j], mypts[j + 1]));
}
lines.Add(new Line(mypts[st], mypts[ed]));
}
柱面网壳参数化生成
柱面网壳的几何参数由跨度、矢高、长度确定。划分参数包括跨度方向划分段数、长度方向划分段数。柱面网壳的划分方式有联方型、三向网格型、单斜杆型等。

结语
在Grasshopper中实现网壳的参数化生成,可以更快的建立不同尺寸参数的网壳结构,将设计人员从繁琐的建模过程的解放出来,更加专注与力学性能方面的计算。
如有兴趣,欢迎私信交流。