垂直于矢量的矢量弧度

Radian of vector perpendicular to vector

本文关键字:于矢量 垂直      更新时间:2023-10-16

我在 (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 轴上的对齐意味着没有旋转),因此您应该交换其参数。