飞盘运动模型的物理学
飞盘是常见的娱乐方式和运动,虽然这些飞盘背后的物理常常被视为是理所当然。飞盘的运转主要基于两个主要物理概念,空气动力学升降和 陀螺稳定性(陀螺仪惯性)。当飞盘在空中飞行时,可以被看作是一个翼,通过伯努利原理来控制提升力的大小,使飞盘悬浮在空中。 施加的各种力不在盘的中心,因此需要防止飞盘在高角动量上翻转。该角动量抑制由各种力引起的扭矩。 编写了使用欧拉方法的计算机程序来模拟飞盘飞行的轨迹。用不同的攻角和不同的距离和高度观察到飞盘达到不同位置的试验。
介绍
几十年来,飞盘已经成为所有年龄段人们广泛使用的娱乐源。他们创造了许多新的运动(终极飞盘,高尔夫球和其他),飞盘每年的销售量比棒球,篮球和足球加起来还多。这些简单的塑料飞盘可以飞行很长的距离,似乎飞盘悬停在空中时能抵抗重力。大多数人认为飞盘背后的物理是理所当然的,但飞盘的运动模型一般可以只使用气动升降和陀螺稳定性两个物理概念来解释。
现代飞盘的历史可以追溯到 1871 年 William Russell Frisbie 在 Bridgeportd 的 Connecticut 开了一个名叫 The Frisbie Pie 的小面包公司。Frisbie 的馅饼在附近的耶鲁大学很受欢迎,学生们开始享受折腾空的饼罐。这开始变得受欢迎,学生开始称罐子为 Frisbies 和抛罐子的行为叫 Frisbieing。
第一次生产实际的塑料飞盘是在 1958 年 Fred Morrison 买了“飞盘”的专利后,但直到 1958 年当 Wham-O 发布了他们的商标“飞盘”时才真正流行起来。最近,Hummel 已经对飞盘进行了研究以确定作用在飞盘上的所有力的大小以及涉及投掷飞盘的生物力学的系数 Hummel(2003) 。此外,还有一个未发表的研究,研究飞盘的其他方面,包含直接从飞盘飞行获取数据的方法。
飞盘飞行理论
飞盘包含的两个主要物理概念是空气动力学升降(或伯努利原理)和陀螺稳定性。旋转飞盘可以被看作是自由飞行中的机翼,伯努利原理是提供升力的原因,并且飞盘的角动量提供其稳定性。
空气动力
作用在飞盘上的两个主要空气动力是阻力和升力。为了确定这些力的大小,将使用两种非常常见的物理关系来描述。为了计算阻力,我们首先必须找到系统的雷诺数,以便知道应用哪个阻力关系。雷诺数 R
由下式给出:
$$ \mathbf{R} = \mathbf{\frac{ρvd}{η}} \tag1 $$
- ρ 表示流体的密度(对于飞盘,流体即空气) (海平面,空气的密度约等于$1.23 kg/m^3$)
- v 表示飞盘与流体(空气) 的相对速度
- d 表示物体的特征尺寸(对于飞盘,特征尺寸是它的直径)
- η 表示流体(空气) 的粘稠度 通常取 $η=1.73×10^−5 Ns/m^2$
对于这个量级的雷诺数,将使用 Prandtl 关系来计算阻力$F_d$,并且由下式给出: $$ \mathbf{F}_{d} = \mathbf{\frac{-\mathbf{C_{D}}ρπ r^2v^2}{2}} = \mathbf{\frac{-\mathbf{C_{D}}ρπ Av^2}{2}} \tag2 $$ 系数$C_{D}$是随物体变化的阻力系数,并且在 Hummel(2003) 中给出为仅取决于攻角α的二次函数。攻角α是飞盘平面和相对速度矢量之间的夹角。
$$ \mathbf{C_{D}} = \mathbf{C_{D0}}+\mathbf{C_{Dα}}(\mathbf{α}-\mathbf{α_{0}}) \tag3$$
系数 $C_{D0}$,$α_{0}$ 和 $C_{Dα}$ 是常数并且取决于飞盘本身。
飞盘受到的升力与飞机机翼上的升力非常相似,并且使用伯努利原理计算。伯努利原理众所周知,它表明流体在同一流线上的任何点的速度,压力和高度之间存在着关系。流体以快速流动的那一侧压力比慢速流动的那一侧压力更低。公式:
$$ \frac{\mathbf{v^2_{1}}}{2} + \frac{\mathbf{p}_{1}}{ρ} + \mathbf{g}\mathbf{h_{1}} = \frac{\mathbf{v^2_{2}}}{2} + \frac{\mathbf{p_{2}}}{ρ} + \mathbf{g}\mathbf{h_{2}} \tag4 $$
- v 流体速度
- p 流体压力
- ρ 流体密度
- g 重力加速度
- h 流体高度
下标 1 和 2 指沿着相同流线的流体中的不同点。这个方程通常被称为伯努利方程。在上方流动的空气和在飞盘下方流动的空气之间的高度差是可忽略的,因此两个高度相关项抵消。我们还假定飞盘上面流动的空气的速度与飞盘下面的空气的速度成正比,因为路径长度的差是恒定的(i.e. $v_{1}=C_{v_{2}}$),等式如下: $$ \frac{\mathbf{C^2v^2_{2}}}{2} + \frac{\mathbf{p_{1}}}{ρ} = \frac{\mathbf{v^2_{2}}}{2} + \frac{\mathbf{p_{2}}}{ρ} \tag5 $$
设置 $F_{L}/A=p_{1}-p_{2}$,$F_{L}$-升力,$A$-飞盘面积,$F_{L}$ 等式:
$$ \mathbf{F_{L}}=\frac{1}{2}\mathbf{ρ}\mathbf{v^2A}\mathbf{C_{L}} \tag6 $$
在确定(6)所需的整个步骤中,系数 C 是并入系数 C_{L}。C_{L} 是 Hummel(2003) 给出的攻角α的线性函数。
$$ \mathbf{C_{L}}=\mathbf{C_{L0}}+\mathbf{C_{Lα}}\mathbf{α} \tag7 $$
$C_{L0}$ 和 $C_{Lα}$ 是取决于飞盘物理特性的常数。
陀螺稳定性
人们发现趣飞盘的旋转是飞盘飞行的机制中的必要组成部分,没有旋转,飞盘只会像落叶一样飘向地面,不能产生长距离,稳定的飞行。 这是由于前面部分中描述的空气动力不直接集中在飞盘上的事实造成的。一般来说,盘前半部的升力稍大于后半部的升力,这会在飞盘上产生扭矩(见图 1)。
图 1
偏心中心压力(COP)和质心(COM)导致施加在飞盘上的扭矩 当飞盘不旋转时,这个小扭矩会使飞盘前半部分翻转,会使飞盘稳定性降低。当飞盘高速旋转抛出的,那么它有较大角动量,使其具有在正或负垂直方向上的向量。当施加小扭矩时,扭矩矢量指向右侧侧面(当从后面观察时)。这可以使用 righthad 规则: $$ \vec{\tau}=\vec{r}×\vec{F} \tag8 $$ 来源于:$$ \vec{\tau} = \frac{d\vec{L}}{dt} \tag{9}$$ 角动量向量将开始向右驱动,即投掷飞盘时飞盘会靠右或者靠左飞行,正是这个原因。因此,给予飞盘的初始角动量越大,它的飞行会更稳定。
飞盘飞行的数值建模
为了模拟飞盘的飞行,编写了一个C++程序,该程序使用了应用于上一节中所描述的力的数值技术欧拉法(参见附录中的代码)。 为了实现这一点,不同的力被分成水平和垂直分量,并且每个分量应用欧拉方法。应当注意,在该模型中,假设飞盘被给予足够的初始旋转,以便保持稳定的飞行。
在应用欧拉方法中,飞盘的轨迹被分成离散的时间步长Δt,并且在每个步骤处新的水平速度 v 和水平位置 x,定义: $$ \mathbf{v_{i+1}} = \mathbf{v_{i}} + \mathbf{Δv} \tag{10} $$ $$ \mathbf{x}_{i+1} = \mathbf{x}_{i} + \mathbf{Δx} \tag{11}$$ 其中Δv和Δx分别是速度和位置的变化。与方程(11)类似的方程可以与垂直方向一起使用位置 y,而不是 x。
通过求解得到Δv以下关系: $$ \mathbf{F_{x}} = \mathbf{F_{D}} \tag{12}$$ $$ \mathbf{m}\frac{Δ\mathbf{v_{x}}}{Δt} = \frac{1}{2}\mathbf{ρ}{\mathbf{v_{x}}}^2\mathbf{A}\mathbf{C_{D} }\tag{13} $$ $$ \mathbf{Δv_{x}} = \frac{1}{2m}\mathbf{ρ}{\mathbf{v_{x}}}^2\mathbf{A}\mathbf{C_{D}}\mathbf{Δt} \tag{14} $$ 其中F_{D}是阻力,那么: $$ \mathbf{F_{y}} = \mathbf{F_{g}} + \mathbf{F_{l}} \tag{15}$$ $$ \mathbf{m}\frac{Δ\mathbf{v_{x}}}{Δt} = \mathbf{mg}\frac{1}{2}\mathbf{ρ}{\mathbf{v_{x}}}^2\mathbf{A}\mathbf{C_{D}} \tag{16}$$ $$ \mathbf{Δv_{y}} = (g+\frac{1}{2m}\mathbf{ρ}{\mathbf{v_{x}}}^2\mathbf{A}\mathbf{C_{L}})Δt \tag{17}$$ 其中下标 x 和 y 分别表示水平速度和垂直速度,F_{g} 是重力。 Δx和Δy,如
$$ \mathbf{Δx}=\mathbf{v_{x}}\mathbf{Δt} \tag{18} $$ $$ \mathbf{Δy}=\mathbf{v_{y}}\mathbf{Δt} \tag{19} $$
写的程序包含一个模拟方法,需要五个输入参数,初始 y(垂直) 位置,初始 y 速度,初始 x 速度(初始 x 位置始终设置为零),攻角(以度为单位)和Δt。 除攻角以外的所有单位均为 SI 单位。在所有试验中,使用Δt= 0.001s。 试验Δt= 0.001s 和测试Δt= 0.002s 和结果之间的差异是不明显的。 (注:在模拟中的系数值使用:$C_{D0} = 0.08,C_{Dα}= 2.72,C_{L0} = .15,C_{Lα}= 1.4)$
仿真结果
当进行模拟时,所有试验的初始高度为1m,初始 x 速度为14m/s,以及 0m/s 的初始 y 速度,这被认为是标准投掷飞盘的速度。试验使用从0°到45°的攻角。这是唯一的参数被改变,因为升力系数和阻力仅取决于攻角。从图 2,图 3 可以看出和图 4 攻角对飞盘轨迹有很大的影响。具有低攻角(一般小于 5 度)升力非常小,飞盘快速下落到地面后短距离,通常小于 20 米。
具有较大的攻角,更大的升力显然和飞盘更大高度和进一步行进,达 40 米。达到最大距离的攻角约为 12°它行驶 40 米,最大高度为 7.7 米。在较大的攻角发射飞盘高度会更高,但由于阻力大,飞行距离较小。试验进行不同的初始速度跟随与具有初始速度的趋势相似的趋势速度为14m/s。在较低的速度下,提升力大大降低,飞盘会更快地掉到地上。在更高的速度提升力更大,轨迹越来越长。
Figure 3. Plot of height(m) versus distance(m) for a Frisbee with initial velocity 14 m/s and angle of attack 7.5◦
Figure 2. Plot of height(m) versus distance(m) for a Frisbee with initial velocity 14 m/s and angle of attack 5◦
Figure 4. Plot of height(m) versus distance(m) for a Frisbee with initial velocity 14 m/s and angle of attack 10◦
C++ 代码如下: Frisbee.hpp 文件
#ifndef FRISBEE_H
#define FRISBEE_H
#define PI 3.1415926
class Frisbee
{
public:
static void simulate(double y0, double vx0, double vy0, double alpha, double deltaT);
private:
static double x;
static double y;
static double vx;
static double vy;
static const double g; //
static const double m; //
static const double RHO; //
static const double AREA; //
static const double CL0; //
static const double CLA; //
static const double CD0; //
static const double CDA; //
static const double ALPHA0; //
};
#endif
Frisbee.cpp 文件
#include"Frisbee.h"
#include<math.h>
#include<iostream>
#include<fstream>
#include<string>
using namespace std;
const double Frisbee::g = -9.81;
const double Frisbee::m = 0.175;
const double Frisbee::RHO = 1.23;
const double Frisbee::AREA = 0.0568;
const double Frisbee::CL0 = 0.1;
const double Frisbee::CLA = 1.4;
const double Frisbee::CD0 = 0.08;
const double Frisbee::CDA = 2.72;
const double Frisbee::ALPHA0 = -4;
double Frisbee::vx = 0;
double Frisbee::vy = 0;
double Frisbee::x = 0;
double Frisbee::y = 0;
void Frisbee::simulate(double y0, double vx0, double vy0, double alpha, double deltaT)
{
//通过 S. A. Hummel 给出的公式计算计算升力系数
double cl = CL0 + CLA*alpha*PI / 180;
//通过 Prantl’s 关系计算阻力
double cd = CD0 + CDA*pow((alpha - ALPHA0)*PI / 180, 2);
//初始化 x 位置
x = 0;
//初始化 y 位置
y = y0;
//初始化 x 方向速度 vx = vx0
vx = vx0;
//初始化 x 方向速度 vy = vy0
vy = vy0;
try{
//将计算结果输出到一个 word 表格
//PrintWriter pw = new PrintWriter(new BufferedWriter
// (new FileWriter("frisbee.csv")));
ofstream fout;
fout.open("frisbee.csv", ios_base::app);
if (!fout.is_open())
{
throw "文件打开失败!";
}
//循环计数
int k = 0;
//一个 while 循环,执行迭代直到 y 位置达到零(即飞盘击中地面)
while (y > 0){
//在 y 方向上的速度变化获得将净力等于重力和提升力的总和并求解 delta v
double deltavy = (RHO*pow(vx, 2)*AREA*cl / 2 / m + g)*deltaT;
//通过求解增量 v 的力方程(存在的唯一力是牵引力)获得 x 方向上的速度变化。
double deltavx = -RHO*pow(vx, 2)*AREA*cd*deltaT;
//新的位置和速度使用简单的力学计算。
vx = vx + deltavx;
vy = vy + deltavy;
x = x + vx*deltaT;
y = y + vy*deltaT;
//只有每十次迭代的输出将被发送到电子表格,以便减少数据点的数量。
if (k % 10 == 0){
//pw.print(x + "," + y + "," + vx);
fout << x << "," << y << "," << vx;
//pw.println();
//fout << "\r\n";
fout << "\n";
fout.flush();
}
k++;
}
fout.close();
}
catch (string s){
cout << s + "Error, file frisbee.csv is in use.";
}
}
int main()
{
Frisbee::simulate(1, 16.5, 0, 6, 0.001);
return 0;
}
因为实际需要进行翻译,如有不足,欢迎指正。
- V. R. Morrison Physics Department, Mount Allison University, Sackville, NB Canada E4L 1E6 ( vrmrrsn@mta.ca )
- 参考原文
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
上一篇: Opencv 计算算法运行时间
下一篇: 彻底找到 Tomcat 启动速度慢的元凶
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论