Rust 如何旋转对象以使其';它总是面对鼠标的位置?

Rust 如何旋转对象以使其';它总是面对鼠标的位置?,rust,nalgebra,Rust,Nalgebra,我用ggez和一些朋友做了一个游戏,我试着让我们的角色在任何时候都旋转面对指针。到目前为止,我知道我需要得到一个以弧度为单位的角度值(f32),我想我可以使用atan2来得到这个(?),但是,我没有得到我想要的行为 这是我的代码:(顺便说一句,move_data是一个结构,它保存玩家角色的值,比如位置、速度、角度和旋转速度) 我想我很接近了,因为我已经可以用这个来旋转角色了,但只是以一种“不完整”的方式。当我将鼠标移动到左上角时,玩家角色(pc)通常只能面向左上角。否则,如果指针指向电脑的右侧和

我用ggez和一些朋友做了一个游戏,我试着让我们的角色在任何时候都旋转面对指针。到目前为止,我知道我需要得到一个以弧度为单位的角度值(f32),我想我可以使用atan2来得到这个(?),但是,我没有得到我想要的行为

这是我的代码:(顺便说一句,move_data是一个结构,它保存玩家角色的值,比如位置、速度、角度和旋转速度)

我想我很接近了,因为我已经可以用这个来旋转角色了,但只是以一种“不完整”的方式。当我将鼠标移动到左上角时,玩家角色(pc)通常只能面向左上角。否则,如果指针指向电脑的右侧和/或下方,它将以非常缓慢和轻微的方式旋转,并停止面向指针。我不知道这个描述是否有意义

我认为问题在于,我不完全确定atan2首先在做什么(我只记得一些基本的三角学),而且我也不确定我是否正确使用了它,所以我不知道我的代码在做什么。(以下是我用于atan2的文档:)

经过多次尝试和错误后,我才获得了这么多,尽可能多地在谷歌上搜索(大部分是Unity教程的结果,在寻找算法来编写代码时显示出来),我也在非官方的Rust社区Discord服务器上询问过,但到目前为止没有任何效果

我之前也有这段代码,但也找不到如何使它工作

let m = mouse::position(ctx); // Type Point2
let mouse_pos = Vector2::new(m.x, m.y); // Transformed to Vector2 to be read by Matrix
move_data.angle = Matrix::angle(&mouse_pos, &move_data.position);

为什么与pi/2相乘
atan2
以弧度表示角度,因此这似乎是一个数学问题,而不是生锈问题
let m = mouse::position(ctx); // Type Point2
let mouse_pos = Vector2::new(m.x, m.y); // Transformed to Vector2 to be read by Matrix
move_data.angle = Matrix::angle(&mouse_pos, &move_data.position);