从开始坐标,角度和距离中获取一个点

时间:2017-02-27 16:18:09

标签: java math vector libgdx rotation

我想要一个包含坐标的Vector。我知道我的开始坐标,角度和距离。到目前为止,我已经尝试过:

    Vector2 pos = new Vector2(beginningX, beginningY).add(distance, distance).rotate(angle);

但它并不像我期望的那样有效。当旋转不是0时,坐标变大,结束点不在我预期的位置。我知道这一定是一个简单的问题,但我无法解决它。

修改 尝试做:

Vector2 pos = new Vector2(beginningX, beginningY).add(distance, 0).rotate(angle);

(仅将distance添加到x)仍然没有成功。

3 个答案:

答案 0 :(得分:4)

我说你做错了:你需要旋转距离向量并将其添加到位置向量中:

Vector2 pos = new Vector2(beginningX, beginningY).add(new Vector2(distance, 0).rotate(angle) );

您可能想要了解矢量数学,但基本上它等于此(如果我正确理解您正在尝试做的事情):

如果旋转矢量,则始终围绕0/0点旋转。因此,您需要创建一个矢量来覆盖从0/0到x轴上距离的距离:

0---------------->d

现在你以某个角度旋转那个矢量:

       d
      /
     /
    /
   /
  /
 0

然后用起点偏移该向量,即添加两个向量(为简单起见,我假设你的起点位于y轴上):

      d
     /
    /
   /
  /
 /   
s
|
|
|
0

答案 1 :(得分:2)

您只需要旋转距离矢量,而不是开始和距离的总和。任何顺序(交换)都是相同的,所以你可以尝试这种方式:

Vector2 pos = new Vector2(distance, 0).rotate(angle).add(beginningX, beginningY);

优点:此链式调用不会为起始位置创建临时Vector2,这会立即成为垃圾收集器的垃圾。当您的代码处理数百万个向量时,节省空间和垃圾收集时间将非常重要。

答案 2 :(得分:0)

这是简单的向量添加。我假设是2D坐标,从x轴逆时针测量角度:

x(new) = x(old) + distance*cos(angle) 
y(new) = y(old) + distance*sin(angle)

将插入三角函数时,请确保角度为弧度。