向量垂直于向量的弧度
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轴上对齐意味着没有旋转),所以你应该交换它的参数。
我有一个介于 (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轴上对齐意味着没有旋转),所以你应该交换它的参数。