news 2026/10/15 1:57:45

飞机位置与朝向:yaw和pitch的双重秘密

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
飞机位置与朝向:yaw和pitch的双重秘密

先说清楚一件最重要的事:

描述一架飞机,需要两样东西:它“在哪里”(位置),和它“朝哪里”(朝向)。
x、y、z 管“在哪里”,yaw、pitch 管“朝哪里”。


一、两样东西互不相干

想象你站在操场上:

位置:你站在操场的哪个点 → 比如“东边篮球架旁边” 朝向:你的脸朝哪个方向 → 比如“面朝北,抬头看天”
  • 你原地转身:位置不变,朝向变了
  • 你侧着横走:朝向不变,位置变了

飞机也一样:

信息用什么描述回答的问题
位置x、y、z飞机在天上的哪个点?
朝向yaw、pitch(roll)机头指向哪里?

二、位置坐标:x、y、z

在地上选一个点当原点(比如机场塔台),规定三个方向(以 Unity 为例):

y(往上) │ │ ●────── x(往东) ╱ ╱ z(往北)

如果飞机的位置是(100, 50, 200),意思就是:

从塔台出发:往东 100 米,往上 50 米,往北 200 米 → 飞机就在那里

这三个数只说明飞机在哪,不说明机头朝哪。


三、朝向:yaw、pitch

还是这架飞机,它的机头指向哪里?

yaw = 机头在水平方向转了多少度(0° = 朝北) pitch = 机头往上抬了多少度 (0° = 平飞)

例如:

yawpitch机头朝向
0°0°朝正北,平着飞
90°0°朝正东,平着飞
0°30°朝北,机头抬起 30°,在爬升
180°-10°朝正南,机头略微往下,在下降

四、两者怎么连起来:飞机往前飞,位置怎么变?

这是最关键的一点:

yaw、pitch 决定飞机往哪个方向走;速度决定走多快;两个合起来,就能算出位置每一秒怎么变。

例子 1:yaw = 0°,pitch = 0°,速度 100 米/秒

机头朝正北,平飞 每过 1 秒:z + 100(往北走 100 米),x、y 不变 位置: (0, 50, 0) → (0, 50, 100) → (0, 50, 200) ……

例子 2:yaw = 90°,pitch = 0°

机头朝正东,平飞 每过 1 秒:x + 100(往东走),y、z 不变

例子 3:yaw = 0°,pitch = 30°(爬升)

机头斜着往上,100 米的速度要“拆”成两部分:

↗ 斜着飞 100 米 ╱ │ ╱ │ 往上:100 × sin30° = 50 米 ╱ 30° │ ✈️──────┘ 往前:100 × cos30° ≈ 87 米
每过 1 秒:y + 50(升高),z + 87(往北)

抬头越多,往上走得越多、往前走得越少。pitch = 90° 时就是垂直往上冲,完全不往前走。

写成代码

// 由 yaw、pitch 算出“机头方向”(长度为 1)floaty=yaw*Mathf.Deg2Rad;floatp=pitch*Mathf.Deg2Rad;Vector3forward=newVector3(Mathf.Cos(p)*Mathf.Sin(y),// 往东的分量Mathf.Sin(p),// 往上的分量Mathf.Cos(p)*Mathf.Cos(y)// 往北的分量);// 每一帧:位置 = 位置 + 方向 × 速度 × 时间position+=forward*speed*Time.deltaTime;

你可以验证:yaw=0、pitch=0 时,forward = (0, 0, 1),正好是“往北”。


五、另一种用法:从塔台看飞机

yaw 和 pitch 还有第二种用法,这也是之前“球坐标”讲的那种,容易和上面混在一起。

现在不问“飞机朝哪”,而是问:

塔台的人要往哪个方向看,才能看到飞机?

✈️ 飞机 (0, 300, 400) ╱│ 距离 500 ╱ │ ╱ │ 高 300 ╱ │ 塔台 👀 ───────────┘ ) 抬头约 37° 水平距离 400
  • 飞机在正北方 → 塔台的yaw = 0°
  • 抬头角度 →pitch ≈ 37°(因为 sin = 300 ÷ 500)
  • 距离 →r = 500 米

所以这架飞机的位置,可以说成:

用 xyz: (0, 300, 400) 用球坐标: yaw 0°,pitch 37°,距离 500

两种说法,说的是同一个位置。雷达就是这样报告飞机位置的:“方位多少度、仰角多少度、距离多远”。


六、同样的词,两种意思

飞机自己的 yaw / pitch塔台看飞机的 yaw / pitch
描述的是机头朝哪(朝向)飞机在哪(位置)
从哪里量从飞机自己身上量从塔台(观察者)身上量
改变它会怎样飞机转向,位置不变飞机换了个地方
游戏里的例子FPS 视角、飞机转向第三人称相机绕角色转、雷达

举个例子:飞机在塔台正北方(塔台看它 yaw = 0°),但它的机头可以朝正东(飞机自己 yaw = 90°)——它正从塔台的北边,横着往东飞过去。


一句话总结

x、y、z 说飞机“在哪”,yaw、pitch 说机头“朝哪”;朝向乘上速度,就是位置每秒的变化。而如果站在塔台上看,yaw、pitch 加上距离,又可以反过来描述飞机“在哪”——这就是球坐标。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/15 1:57:05

Go 1.27.1 内存局部性调优实录:压榨 CPU 缓存行命中率的工程实践

在微服务吞吐量达到数万 QPS 的高性能网关或高频事件调度引擎中,单纯依赖算法时间复杂度(如将 $O(N)$ 降为 $O(1)$)已经无法进一步带来数量级的性能突破。很多底层服务开发者发现,即便 CPU 利用率跑满了 100%,服务处理…

作者头像 李华
网站建设 2026/10/15 1:56:10

1956亿行时序数据如何高效存储?从压缩算法、批量写入到超表优化

文章目录前言一、时序数据为什么需要专门的压缩策略?1. 时序数据具有较强的规律性2. 常见的时序压缩技术3. 1956亿行数据的压缩测试二、面对百亿行历史数据,如何提高批量写入效率?1. 历史数据导入与实时写入有所不同2. 批量写入优化主要解决哪…

作者头像 李华
网站建设 2026/10/15 1:53:07

C语言+EasyX实战:消灭星星消除逻辑与BFS算法详解

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/15 1:52:10

微积分重点难点全解析:极限、导数、积分、级数复习指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华