gpt4 book ai didi

c++ - 这是使用点积求两个 vector 之间角度的正确方法吗? C++ SFML

转载 作者:行者123 更新时间:2023-11-28 06:34:03 26 4
gpt4 key购买 nike

所以在另一个问题中有人告诉我,您可以使用点积的简化公式来计算两个 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com