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