先说清楚一件最重要的事:
描述一架飞机,需要两样东西:它“在哪里”(位置),和它“朝哪里”(朝向)。
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° = 平飞)例如:
| yaw | pitch | 机头朝向 |
|---|---|---|
| 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 加上距离,又可以反过来描述飞机“在哪”——这就是球坐标。