---
title: "一个偏心圆怎样变成会产生升力的翼型互动实验｜Sandbox Physics"
description: "翼型带多大的环流、产生多大的升力，由什么决定？由 Kutta 条件定，再加上翼型形状和攻角。"
canonical_url: "https://sandboxphysics.com/zh/labs/airfoil-circulation/"
language: "zh-CN"
page_type: "lab"
alternate_languages:
  en: "https://sandboxphysics.com/labs/airfoil-circulation/"
last_modified: "2026-10-27"
---

流体力学 · 翼型测压工作台

# Airfoil Circulation Studio

**翼型带多大的环流、产生多大的升力，由什么决定？** 由 Kutta 条件定，再加上翼型形状和攻角。单看理想流动，翼型可以带任意大小的环流；Kutta 条件只挑一个：流动在尖锐后缘以有限速度平顺离开。换成别的环流，流体绕过后缘时速度会趋于无穷。环流定下来，压力差和升力也就定了。

在可旋转的三维风洞里，上下表面压力、可移动的测压点、表面压力积分和环流升力都来自同一个 Joukowski 解。改变翼型和采样精度，看压力积分算出的升力和零阻力与理论差多少；关闭 Kutta 条件，后缘的奇点会直接显示出来，压力不会被截断成“正常”的样子。

> 交互仿真：在浏览器中打开本页，即可调整参数并运行模型。

流动按二维、稳态、不可压缩、无黏的势流计算，翼展方向的立体形状只用于显示。Joukowski 翼型可以把解析解和源／涡面板解对照；NACA 四位数翼型把后缘修正为闭合，用 Hess–Smith 面板求解。面板残差小，不代表网格已经收敛；后缘面板上的速度也不等于解析解在尖点处的极限。不模拟失速、边界层和有限翼展效应。

物理教程

## 翼型环流：后缘条件怎样选出升力

**背景** 不可压缩、无黏、无旋的流动，可以先在圆外求解，再用保角映射搬到翼型周围。圆心偏到哪里，同时决定翼型的弯度和厚度；尖锐的后缘对应映射的一个临界点。

**为什么值得理解** 这个模型预测不了失速，但它把几何、环流、表面流速、压力差和升力串成了一条完整的因果链。

先抓重点

- **核心问题**: 同一个翼型，数学上允许许多种环流，为什么真实的附着流动只取其中一个？
- **一句话直觉**: Kutta 条件要求后缘处速度有限、流动平顺地离开，这样就只剩一个环流 $\Gamma$；它造成的压力差就是升力。

### 核心数学模型

#### NACA 几何与源／涡面板解

$$
y_t=5t\left(0.2969\sqrt{x}-0.1260x-0.3516x^2+0.2843x^3-0.1036x^4\right),\quad \mathbf V\cdot\mathbf n=0,\quad V_{t,1}+V_{t,N}=0
$$

中弧线和厚度用 NASA TM 4741 的四位数多项式，末项系数改过，让后缘闭合。Hess–Smith 方法给每块面板一个源强，再加一个均匀的涡层强度，同时满足流动不穿透壁面和 Kutta 条件；表面压力、流线和环流都出自这一个数值解。面板残差、源通量误差和半分辨率重算的压力积分，和解析 Joukowski 模式分开显示。残差小，不代表网格已经收敛。

#### 后缘速度有限，但一般不为零

$$
\frac{V_{\mathrm{TE}}}{U_\infty}=\frac{b}{R}\left|\cos(\alpha-\beta)\right|,\qquad \beta=\arg(b-\zeta_c)
$$

取 Kutta 环流时，复速度的分子和映射导数在后缘同时为零。解析地消去这个公共零点，剩下的速度有限，通常也不为零。关闭 Kutta 后，如果公共零点不再存在，速度就没有有限极限；这时压力积分检查直接停用，不去截断奇点。

#### 用表面压力积分算力

$$
C_x=-\oint C_p\,\mathrm{d}(y/c),\quad C_y=\oint C_p\,\mathrm{d}(x/c),\quad C_{L,p}=-C_x\sin\alpha+C_y\cos\alpha
$$

沿翼型轮廓逆时针积分未截断的压力，再取垂直来流的分量作为升力。结果拿来和环流公式给出的升力、以及零阻力对照，差值和数值阻力都会显示出来。半采样数下的误差是真正重算一遍得到的，不是事先假定的精度。轮廓积分方法参考 MIT 18.354J 第 20 讲。

#### Joukowski 保角映射

$$
z=\zeta+\frac{b^2}{\zeta}
$$

原像平面里的一个偏心圆，映射后变成前缘圆钝、后缘尖锐的翼型截面。

#### 圆柱外部的复势

$$
W(\zeta)=U_\infty\left(e^{-i\alpha}\eta+e^{i\alpha}\frac{R^2}{\eta}\right)+\frac{i\Gamma}{2\pi}\log\eta,\qquad \eta=\zeta-\zeta_c
$$

圆柱平面里的解析解由三部分叠加：均匀来流、圆柱的镜像项和携带环流的点涡。

#### 压力与升力

$$
C_p=1-\left\lvert\frac{V}{U_\infty}\right\rvert^2,\qquad L'=\rho U_\infty\Gamma,\qquad C_D=0
$$

Bernoulli 关系把表面流速换成压力。后缘速度有限时，Kutta–Joukowski 定理给出单位翼展升力，闭合的压力积分给出零阻力；零阻力正好暴露了模型缺少黏性。后缘出现奇点的解，不做这项压力积分对照。

### 常见难点

#### Kutta 条件不会凭空添力

**容易误解** 打开 Kutta 条件，等于给翼型偷偷加了一个升力来源。

**正确理解** 它不是外力。数学上允许许多个环流值，它只是从中挑出后缘速度有限、流动平顺离开的那一个。

#### 零阻力只是模型的结果

**容易误解** 压力图有升力、没有阻力，那真实翼型也能毫无损耗地飞。

**正确理解** 无黏势流忽略了边界层、尾迹和表面摩擦，必然算不出阻力和失速。这个矛盾就是 D’Alembert 悖论。

### 动手实验

1. 01

   #### 从零升力开始

   选择“对称 · 零升力”，保持 Kutta 条件开启。

   **你会看到：** 上下表面的流线和压力几乎对称，环流和升力读数都接近零。

2. 02

   #### 只改变攻角

   选择“巡航翼型”，观察上表面的低压测点和升力矢量。

   **你会看到：** 上表面流动加快，压力系数下降；Kutta 条件选出的环流和单位翼展升力一起增大。

3. 03

   #### 关闭后缘条件

   选择“关闭 Kutta”，在几何不变的情况下比较流线和压力。

   **你会看到：** 环流为零，理论升力也为零，但后缘速度出现奇点。压力曲线可能冲出画框，原始数据照样保留；压力积分显示为不适用，以免把截断后的有限数值当成正常解。

4. 04

   #### 用两种算法检查精度

   回到“巡航翼型”，把积分采样从 $N=32$ 加到 $N=128$，再移动测压位置。

   **你会看到：** 压力积分算出的升力逐渐接近环流公式，数值阻力趋近零。解析 Joukowski 模式直接在精确翼面上取值；面板模式在算出的面板中点压强之间插值，所以局部测压值会随加密改变。

物理结论

Joukowski 映射给出形状，Kutta 条件选出环流，Bernoulli 关系和 Kutta–Joukowski 定理再把环流变成压力差和升力。

概念灵感：[FluidMotion](http://www.bugman123.com/FluidMotion/index.html)。模拟和图形都是原创，模型的适用范围见上文。

场、流体与物质 · 入门路径

## 从电场到电子显微镜

先看懂电场、学会操控带电粒子，再算出电子的波长，用电子束观察晶体和表面。

[从这里开始 → **看见电场** 在偶极子周围移动探针，看电场是不是总指向电势地形的下坡方向。 观察 · 8 分钟](https://sandboxphysics.com/zh/labs/electric-field/)

1. [1 看见电场](https://sandboxphysics.com/zh/labs/electric-field/)
2. [2 电荷在场中转弯](https://sandboxphysics.com/zh/labs/charged-particle/)
3. [3 电子波长与加速电压](https://sandboxphysics.com/zh/labs/electron-wavelength/)
4. [4 电子衍射与倒空间](https://sandboxphysics.com/zh/labs/electron-diffraction/)
5. [5 TEM 明场、暗场与选区衍射](https://sandboxphysics.com/zh/labs/tem-mode-selector/)
6. [6 SEM 二次电子表面形貌](https://sandboxphysics.com/zh/labs/sem-topography/)

[查看完整路径 →](https://sandboxphysics.com/zh/topics/fields-and-matter/#starter-path)
