Java 如何旋转对象使其始终面向鼠标?

Java 如何旋转对象使其始终面向鼠标?,java,mouse,rectangles,drawing2d,Java,Mouse,Rectangles,Drawing2d,我正在尝试做一个游戏,我需要玩家(矩形)一直盯着鼠标,我在这上面找到了一些页面,但我似乎不懂数学。 主要内容: 鼠标侦听器: int mx = e.getX(); int mY = e.getY(); float rotation = Math.atan((mouseX-playerX)/(mouseY-playerY)); //<--- I don't know intmx=e.getX(); int mY=e.getY(); float rotation=Math.atan((

我正在尝试做一个游戏,我需要玩家(矩形)一直盯着鼠标,我在这上面找到了一些页面,但我似乎不懂数学。 主要内容:

鼠标侦听器:

 int mx = e.getX();
 int mY = e.getY();

float rotation = Math.atan((mouseX-playerX)/(mouseY-playerY)); //<--- I don't know
intmx=e.getX();
int mY=e.getY();

float rotation=Math.atan((mouseX playerX)/(mouseY playerY))// 你应该使用线性代数,而不是使用正弦和余弦,你使用向量

如果你有P1=(x1,y1)(玩家所在的位置)和P2=(x2,y2)(鼠标指针所在的位置),那么你有向量V=(x2-x1,y2-y1)=(v1,v2),它的长度为V=| V |=sqrt(v1^2+v2^2)。然后你有一个向量(长度=1)M=(v1/v,v2/v)=(m1,m2)

然后,您可以通过映射(x,y)->(x*m1-y*m2,x*m2+y*m1)来旋转点,而不是计算角度

另见

(记住在V=0的情况下要小心)


注意:使用atan是可以的,但您需要检查x和y的符号。。如果它们都是负数,你会找到错误的角度;如果一个是正的,另一个是负的,你仍然不知道你的箭头是指向NW还是SE。

2D还是3D?更多的信息将很好@Grantly,2d,很抱歉造成混淆。您需要使用
atan2
,而不是
atan
,否则您无法区分直接面对鼠标和直接远离鼠标之间的区别。所以数学数学。atan2((mouseX playerX)/(mouseY playerY))<代码>数学.atan2(mouseY playerY,mouseX playerX)
向量计算会比sin/cos/tan更快吗?(我倾向于认为向量更快,但重视你的发现)
 int mx = e.getX();
 int mY = e.getY();

float rotation = Math.atan((mouseX-playerX)/(mouseY-playerY)); //<--- I don't know