垂直于矢量的矢量弧度
Radian of vector perpendicular to vector
我在 (posX, posY)
和 (mouseX, mouseY)
之间有一个向量,我用 allegro 的事件库将鼠标位置作为正整数。从这个使用反正切的矢量中,我得到了(deltaX, deltaY)
的弧度。然后,我将该弧度插入al_draw_rotated_bitmap
函数中。我希望位图指向鼠标光标所在的位置,但我遇到的问题是弧度或矢量导致它垂直于光标旋转。
以下是相关代码:
void setRotation(int dx, int dy)
{
float deltax = posX - mouseX;
float deltay = posY - mouseY;
rotation = atan2(deltay, deltax);
}
void Player::draw()
{
al_draw_rotated_bitmap(player, al_get_bitmap_width(player) / 2, al_get_bitmap_height(player) / 2, posX, posY, rotation, 0);
}
int main()
{
while(true)
{
player.setRotation(mouseX, mouseY);
player.draw();
al_flip_display();
}
}
想象一下(deltax, deltay)
= (0, 100)
,即鼠标在物体上方 100 像素,因此图片(我相信)根本不应该旋转。但是atan2(deltay, deltax) = atan2(100, 0) = π/2
,这就是为什么您的图片垂直旋转的原因。
要解决此问题,您应该将其更改为 atan2(deltax, deltay)
,可能会在参数之前添加-
,具体取决于 Allegro 中 X 轴和 Y 轴的方向,我不知道。
换句话说,atan2
测量相对于 X 轴的角度,但在您的情况下,角度应相对于 Y 轴测量(因为 Y 轴上的对齐意味着没有旋转),因此您应该交换其参数。
相关文章:
- 分段故障(堆芯转储)矢量
- 为什么在popback()操作之后,它仍然打印完整的矢量
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 将二维矢量传递给类
- 读取文件并输入到矢量中
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- 无法通过空白将文本文件行分隔为矢量
- C++-试图将函数指针推回到另一个CPP文件中的矢量时出错
- 正在将csv文件读取为双精度矢量
- 确保特征将 AVX 矢量化用于特定操作
- C++ 删除存在于另一个矢量中的矢量项,同时保留顺序
- 您可以将binary_search应用于具有自定义类型的矢量吗?
- 通过矢量下标访问 Fortran 数组,相当于 cpp
- 检查元素是否存在于二维矢量中
- 垂直于矢量的矢量弧度
- 返回 C++ 等效于 c# 的矢量
- 如何相对于其他元素过滤矢量元素
- 如何将光流矢量仅应用于检测到的圆
- C++以<structs>独立于平台的方式序列化和压缩矢量
- C++ 矢量复制适用于一个向量,但不适用于另一个向量