利用 Grasshopper 绘制冯·卡门曲线
前言
冯·卡门曲线在航天中被广泛应用于整流罩等部件,以降低空气阻力。在设计火箭等纸模型时,难免会和它打交道。由于冯·卡门曲线属于非线性曲线,由它绕转而成的曲面也是一个不可展开的曲面。
在纸模型设计中,这类部件往往需要被拆分为多个可展开曲面(比如拆分成若干个圆台与圆锥)。手动建模时,可以依照肉眼的直觉直接在不同高度画圆,然后放样。但这种做法不利于后期的调整。如果要建的模型不止一个,那么建模者也不得不进行重复劳动。此外,用这种方法画出的截面往往不够平滑,很容易让人产生违和感。
于是,我决定研究一下如何在 Grasshopper 中做出带有冯·卡门曲线的整流罩截面曲线。
思路
冯·卡门曲线的公式为
虽然看起来绘制这个曲线非常简单,但问题在于大部分火箭的整流罩截面曲线都不是完整的冯·卡门曲线——整流罩顶部往往是球形的,而冯·卡门曲线绕转出的锥体必有尖端。当球径较小的时候视觉效果还行,球径较大时,曲线和实物的差距就非常大了。
为了得到比较好的效果,势必要将整流罩曲线分为两段——冯·卡门曲线段与圆弧段。
于是可以得到大概思路:
- 绘制冯·卡门曲线
- 取断点,求断点处斜率
- 根据斜率计算圆弧大小与位置
但是这种方式存在一个问题:无法较为准确地得到高度一定的曲线,需要进行调参。
所以需要在以上步骤的基础上加上:
- 计算总长
- 根据总长自动修正参数(L)
实现
利用原生的 Grasshopper 显然是难以实现自动修正参数的——这需要循环语句,所以这时便需要使用 Python 了。
虽然在折腾这个功能前我还没接触过 Python,但好在这个问题本身并不复杂,也不需要进行什么优化。大力出奇迹
1 | __author__ = "FZDSL" |
r
输出经过修正的 L
长度,a
则输出圆心位置。
然后接下来简单取点连线即可。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 FZDSLR!
评论