我想要一个包含坐标的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
)仍然没有成功。
答案 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)
将插入三角函数时,请确保角度为弧度。