所以在另一个问题中有人告诉我,您可以使用点积的简化公式来计算两个 vector 之间的角度:
angle = atan2(mouseY, mouseX) - atan2(yPos, xPos); //xPos, yPos is position of player
除此之外,根据我的理解,它只是将点作为 vector 。这就是为什么将鼠标和播放器位置插入参数中的原因。但是,当我在 360 度半径范围内围绕播放器移动鼠标时,播放器的角度和旋转值约为 -0.3... 到 -1.4... 这不是正确的方法吗?我是否应该将 vector 表示为其他东西而不是 X、Y 位置?
还有一个我发现的公式似乎也不适合我:
angle = atan2(mouseY - yPos, mouseX - xPos);
最佳答案
第一种方法正确,第二种方法错误。函数 atan2(x,y)
计算从 (0,0)
指向 (x ,y)
相对于 x 轴。因此,计算 vector 相对于 x 轴的两个角度(以弧度为单位)然后将它们彼此相减以获得两个 vector 之间的角度是正确的。
函数 atan2
的结果是半开区间 (-pi,pi]
中的一个值。以度数表示,这对应于 ( -180°,180°)
。因此,0° 表示指向右(沿 x 轴)的 vector ,90° 表示向上的 vector ,180° 表示向左的 vector ,-90° 表示向下的 vector 。
您可以通过公式将以弧度为单位的结果转换为角度
atan(x,y)*180/pi
因此,如果您想将结果值转换为角度,只需将它们乘以 180/pi
。
关于c++ - 这是使用点积求两个 vector 之间角度的正确方法吗? C++ SFML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27052063/