Java 从一点到另一点以相同的角度移动?

Java 从一点到另一点以相同的角度移动?,java,android,trigonometry,angle,Java,Android,Trigonometry,Angle,我需要能够移动我的播放器x和y像素在同一方向作为一个点到一个点。这很难解释,但这就是我想做的: 角度1和2必须相同。点1在(100100)处保持不变,但点2不断变化,角度也必须不断变化。我试过这个: moveRectangle.setX(touchEvent.getX()); moveRectangle.setY(touchEvent.getY()); float theta = (float) Math.toDegrees(Math.atan2(touchEvent.getY() - 100

我需要能够移动我的播放器x和y像素在同一方向作为一个点到一个点。这很难解释,但这就是我想做的:

角度1和2必须相同。点1在(100100)处保持不变,但点2不断变化,角度也必须不断变化。我试过这个:

moveRectangle.setX(touchEvent.getX());
moveRectangle.setY(touchEvent.getY());
float theta = (float) Math.toDegrees(Math.atan2(touchEvent.getY() - 100,touchEvent.getY() - 100));
float velX = (float) (getSpeed() * Math.cos(theta));
float velY = (float) (getSpeed() * Math.sin(theta));
player.move(velX, velY);

当用户将手指放在moveRectangle(点2)上并移动它时,上面的代码会持续运行。但是上面的代码不起作用。玩家只是朝两个方向中的一个移动。player.move只是增加了速度和速度。那么,我怎样才能得到两个角度并将玩家移动到正确的方向呢?谢谢。

使用笛卡尔方法(向量)和极坐标方法(角度和幅度)来处理这个问题会更容易吗?因此,如果播放机位于点
p0
,且“手指”位于点
p1
,则播放机应移动的方向
v
由向量
p1-p0
给出。然后,您可以根据玩家的速度缩放生成的向量
v
,并将玩家的速度添加到其位置。您可以轻松地逐帧执行此操作。

删除
Math.toDegrees()

Math.sin()
/
cos()
Javadoc:

参数:

  • a-角度,以弧度为单位
返回:

  • 争论的正弦波

您只需要知道X轴和Y轴上的速度吗?你可以不用三角学来做(只需使用)


或者你需要一个玩家在循环中移动的代码?

为什么我没有想到?这正是我需要的,谢谢。不过有一个问题,当我以45度的增量移动时,它停止了。(直接向上、向下等…)@user2005938,能显示代码吗?停止检查中可能会出现一些问题。没关系,我在player类中有一段代码,如果没有速度,它会停止移动。
final float deltaX = touchEvent.getX() - player.x; // player.x is point1.x
final float deltaY = touchEvent.getY() - player.y; // player.y is point1.y
final float length = Maths.sqrt((deltaX)^2 + (deltaY)^2);
final float itterations = length / getSpeed();
final float velX = deltaX / itterations;
final float velY = deltaY / itterations;
player.move(velX, velY);