这是使用点积找到两个向量之间角度的正确方法吗?C++ SFML
Is this the correct method of using dot product to find the angle between two vectors? C++ SFML
所以在另一个问题中,我被告知你可以使用点积的简化公式来找到两个向量之间的角度:
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
.
相关文章:
- std::atomic和std::condition_variable wait,notify_*方法之间的区别
- 不同的类或结构初始化方法之间的性能差异是什么?
- #include < conio.h> 和 getch() 方法之间的关系是什么?
- 是否有一种标准方法来计算两个 asctime() 值之间的天数
- 在C++事务之间存储大量字符数据的有效方法
- 定义类模板构造函数的两种方法之间的区别
- std::list 的两个 insert() 方法签名之间的实现差异
- 使瓷砖之间没有边框的最佳方法?
- 两个类之间的共享方法
- 在C++和Python之间交换数据的最快方法是什么?
- 计算两个uint8_t变量之间差值的最快方法是什么?
- 在 c++ 中,在线程之间共享数据容器的最佳方法是什么?
- 获取字符串大小的各种方法之间的比较
- 在 C 中并行化嵌套循环的几种方法之间的差异,C++使用 OpenMP
- 在两个Raspberry Pis C 之间发送重复命令的方法
- 分流场算法C++方法之间未正确传递?
- 根据编译时条件在类型之间选择类型的惯用方法
- C++对象构造方法之间的差异
- 有没有一种方法可以在基于枚举的可变参数模板函数之间进行选择,这比将函数包装在结构中更简单
- 在QTcpSocket和python套接字之间交换数据的正确方法是什么?