2017-02-27 132 views
0

我想获得一个包含坐标的Vector。我知道我的起点坐标,角度和距离。到目前为止,我已经尝试过:从起始坐标,角度和距离获取一个点

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

但它不起作用,因为我期望它。当旋转不是0时,坐标变大,并且终点不在我期望的位置。我知道这肯定是一个简单的问题,但我无法解决它。

编辑: 试着这样做:

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

(添加distancex只)仍然没有成功。

+0

你确定你需要角度吗?假设你有矢量(1,1),加(2,3)然后你得到(3,4)。这不是你要求的还是我误解了你的问题?编辑:只需将距离添加到y坐标就像添加一个垂直向量到现有的一个 – vikeri

回答

3

我说你这样做是错误的:你需要旋转距离向量,并把它添加到位置向量:

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

你可能想在矢量数学阅读了,但基本上它相当于(如果我正确地理解你想要做什么):

如果你旋转一个矢量,你总是围绕点0/0旋转。因此,你需要创建覆盖到你的距离在x轴从0/0的距离向量:

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

现在你旋转,通过一些角度矢量:

 d 
    /
    /
    /
/
/
0 

然后您偏移向量通过你的出发点,即添加了两个向量(为简单起见,我假设你的出发点是在y轴):

 d 
    /
    /
/
/
/ 
s 
| 
| 
| 
0 
+0

我想知道为什么我们不会在数学课上学习有用的东西。 –

+0

@LórántGerber只能猜测;) – Thomas

+0

向量是在数学课中讲授的。你只需要采取正确的。 – duffymo

2

您需要旋转仅距离向量,而不是开始的总和宁和距离。另外就是以任何顺序(交换)一样,所以你可以试试这个方法:

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

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

0

这是简单的矢量添加。我假设二维坐标,与x轴逆时针测量角度:

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

确保您的角度以弧度,当你将它们插入三角函数。

相关问题