Rhino的Grasshopper平台实现球面网壳和柱面网壳的参数化生成

球面网壳和柱面网壳的参数化生成

引言

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中实现网壳的参数化生成,可以更快的建立不同尺寸参数的网壳结构,将设计人员从繁琐的建模过程的解放出来,更加专注与力学性能方面的计算。

如有兴趣,欢迎私信交流。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lzn_nzL

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值