You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何判断向量同向?右手坐标系下玩家北向朝向判断需求

判断玩家前向是否更朝北的实现方案

嘿,这个问题其实用向量点积就能轻松搞定,咱们把逻辑理清楚就很简单了:

核心原理:向量点积的方向判断

在三维空间里,两个单位向量的点积结果直接反映了它们的方向关系:

  • 点积大于0:两个向量的夹角小于90°,说明玩家前向和北向的方向更接近(也就是更朝北)
  • 点积等于0:两个向量垂直,玩家正朝东/西方向,既不朝北也不朝南
  • 点积小于0:夹角大于90°,玩家前向更偏向朝南

点积的计算很简单,对于你的vec结构体,公式就是:
dot = north.x * forward.x + north.y * forward.y + north.z * forward.z

代码实现

先确认你的结构体定义(和你给出的一致):

struct vec { float x; float y; float z; };

然后编写判断函数:

#include <stdbool.h> // 要用到bool类型的话需要这个头文件

// 参数:north是北向单位向量,forward是玩家前向单位向量
// 返回值:true = 更朝北,false = 朝南或正东西方向
bool isFacingMoreNorth(const struct vec* north, const struct vec* forward) {
    // 计算两个单位向量的点积
    float dotProduct = north->x * forward->x + north->y * forward->y + north->z * forward->z;
    
    // 点积>0意味着前向与北向夹角小于90度,更朝北
    return dotProduct > 0.0f;
}

注意事项

  • 务必保证传入的north和forward都是单位向量!如果不是单位向量,点积的数值大小会受模长影响,但符号依然能正确反映方向关系(不过题目明确说是单位向量,所以这个没问题)
  • 你的右手坐标系(y轴竖直向上)不影响这个逻辑,因为点积的方向判断是坐标系无关的,只要两个向量在同一坐标系下就行

内容的提问来源于stack exchange,提问作者user9564128

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:31:09