这是使用点积找到两个向量之间角度的正确方法吗?C++ SFML

Is this the correct method of using dot product to find the angle between two vectors? C++ SFML

本文关键字:之间 方法 SFML C++ 向量 两个      更新时间:2023-10-16

所以在另一个问题中,我被告知你可以使用点积的简化公式来找到两个向量之间的角度:

angle = atan2(mouseY, mouseX) - atan2(yPos, xPos); //xPos, yPos is position of player

除了,据我所知,它只是将点作为向量。这就是鼠标和玩家位置插入参数的原因。但是,当我以 360 度半径在播放器周围移动鼠标时,播放器的角度和旋转值约为 -0.3...至 -1.4...这不是正确的方法吗?我是否应该将向量表示为不是 X、Y 位置,而是其他东西?

发现还有另一个公式似乎也不适合我:

angle = atan2(mouseY - yPos, mouseX - xPos);

第一种方法是正确的,第二种方法是错误的。该函数atan2(x,y)计算相对于 x 轴从 (0,0) 指向 (x,y) 的矢量的角度(以弧度为单位)。因此,计算两个角度(以弧度为单位)是正确的,这些角度与 x 轴有关,然后相互减去以获得两个向量之间的角度。

函数 atan2 的结果是半开区间 (-pi,pi] 中的值。以度表示,这对应于(-180°,180°) .因此,0° 表示指向右(沿 x 轴)的矢量,90° 表示指向上方的矢量,180° 表示指向左侧的矢量,-90° 表示指向下方的矢量。

您可以通过公式将弧度结果转换为角度

atan(x,y)*180/pi

因此,如果要将结果值转换为角度,只需将它们乘以 180/pi .