我正在尝试制作游戏,我需要玩家(矩形)始终看着鼠标,我已经找到了一些页面,但我似乎无法理解数学。 主:
g2d.rotate(calculateRotation, x,y);
g2d.fill(player);
g2d.rotate(-calculateRotation, x,y);
鼠标侦听器:
int mx = e.getX();
int mY = e.getY();
float rotation = Math.atan((mouseX-playerX)/(mouseY-playerY)); //<--- I don't know
答案 0 :(得分:1)
你应该使用线性代数 - 而不是使用正弦和余弦,你使用向量。
如果你有 P1 =(x1,y1)(玩家在哪里)和 P2 =(x2,y2)(鼠标指针所在的位置),那么你有向量 V =(x2-x1,y2-y1)=(v1,v2),其长度为v = | V | = sqrt(v1 ^ 2 + v2 ^ 2)。那么你有一个versor(长度为1的向量)M =(v1 / v,v2 / v)=(m1,m2)。
然后,您可以通过映射(x,y) - &gt;(x * m1-y * m2,x * m2 + y * m1)来旋转点,而不是计算角度。
另见https://en.wikipedia.org/wiki/Rotation_matrix#In_two_dimensions
(并记得小心V = 0)
注意:使用atan是可以的,但你需要检查x和y的符号..如果它们都是负数,你会发现错误的角度;如果一个是正面的而另一个是负面的,你仍然不知道你的箭头是指向NW还是SE。