【CG物理模拟】风筝模拟

来源:互联网 发布:java adobe 生成pdf 编辑:程序博客网 时间:2024/05/16 00:36

放风筝是一项起源于中国的传统娱乐项目,随后推广到世界各地。按作用可以分成节日庆典祝福风筝,体育竞技类,单纯的娱乐向风筝等。要想用计算机较为真实的模拟风筝运动,首先我们先得搞清楚风筝的受力情况。

飞行原理

如图(b)所示,风筝在天空中飞翔时所受的力为:风筝线的张力,尾巴的张力,自身的重力,以及风的作用力,这里我们分为升力和阻力。风筝飞行原理与飞机等类似,但是相比,因为本体非常薄,更易受风的影响。

地面上的人通过风筝线调整线的张力大小,我们可以通过之前介绍的 [绳子模拟] 一篇使用质量-弹簧系统来实现。同理尾巴是为了保持风筝平衡,通过调整尾巴的重量,也可以使用mass-spring系统轻易实现。

难点在于升力和阻力的处理。传统上,可以通过数值方法对空气流体的控制方程进行求解,虽然精度上有保障,但是需要构造一个特殊的风筝面网格结构或者FEM,计算量过于庞大,这里我们介绍一种使用航空力学试验数据的方法。


升力和阻力处理

假设风速大小不变,风筝从起飞到平稳飞行的过程中,迎风角(上图(b))一直在发生变化,也就是说升力和阻力的大小与迎风角有直接联系,有学者通过风洞实验,测出在AR=0.68(图中红线)和AR=1.48(图中绿线)下,这里的AR=b/c 是风筝长宽比,即最上图(a),迎风角的大小对应的升力系数C_L和阻力系数C_D。


这时候,随着迎风角α的变化,我们都可以参照图表得到一个对应的升力系数和阻力系数,利用众所周知的升力和阻力计算公式,如下:


这里ρ是空气密度,U 是气流相对风筝的相对速度,n是风筝的面法线,S是面积。通过读取实验数据计算C_L和C_D,便可以计算出生力L和阻力D

另外上面的实验数据α的范围是0~45。当α>45的时候,我们参照Wang[2008]的方法,计算升力系数C_L和阻力系数C_D,如下:


事实上,在实验中,随着迎风角α的变化,风压中心(第二张图中的working point)也在一直变化,利用得到的实验数据,如图:


根据上述力的合力,我们可以计算风筝的位移,而这里的风压中心则会直接影响升力和阻力的力矩的计算,由此来计算风筝的旋转。通过控制风筝只在x-z和y-z轴旋转,以得到更稳定的状态。

延伸
为了增加风筝的稳定性和真实性,可以添加下图类似的风筝形变,相关内容可以参照参考文献[1],另外文章中也介绍了如何模拟复杂形状的风筝,即把复杂模型划分成多片小网格区域分别做如上处理。

当然这种方法的局限性就是只能模拟一般的平面风筝,而像长串风筝,3D形状的风筝,因为没有相关风洞试验数据,模拟起来比较困难。


结果

结果图如下:





参考文献 

[1] Okamoto et al., "Interactive Simulation of Flying Japanese Kites", 2009, ACM SIGGRAPH Video Game Proceedings.

[2] WANG, Z. "Aerodynamic efficiency of flapping flight: analysisof a two-stroke model", 2008, Journal of Experimental Biology 211,2, 234.


飞行原理

升力和阻力处理
0 0
原创粉丝点击