如何检查向量是否面向同一方向

use*_*128 3 c++ vector direction

我正在研究一个问题,我在右手坐标系中工作,其中 y 轴垂直。我得到了一个表示 3 维向量的结构,如下所示:

struct vec{float x; float y; float z; };
Run Code Online (Sandbox Code Playgroud)

我需要编写一个函数,该函数接受代表北的单位向量和代表玩家的前向向量的单位向量,如果他们面向北的方向多于向南的方向,则返回。不幸的是,我不知道从这里去哪里,我相信我必须做类似的事情:

PlayerDirection = sqrt((PlayerVector.x *= PlayerVector.x)
                     + (PlayerVector.y *= PlayerVector.y)
                     + (PlayerVector.z *= PlayerVector.z));
Run Code Online (Sandbox Code Playgroud)

但我不知道从这里该去哪里。任何帮助/解释都会有帮助,谢谢。

RAM*_*RAM 6

对两个向量应用点积。如果两个向量之间的角度小于 90 度,则点积将为正值,否则为负值。

  • @YS 在这种情况下,这些角度是等效的。OP 希望“如果[玩家]面朝北多于朝南,则返回”。 (2认同)