在libgdx box2d中旋转矢量,从大炮发射炮弹

时间:2013-01-20 07:29:32

标签: vector rotation box2d libgdx

我有一个发射炮弹和烟雾粒子效果的大炮,我希望炮弹从大炮的末端开始,我可以通过将大炮的宽度加到其x位置并添加一半加农炮的高度。当大炮未旋转但是当我旋转大炮时它不在正确位置时工作正常。这就是我用来尝试旋转矢量的方法。

Vector2 rotPos = cannon.position.tmp().add(cannon.bounds.width, cannon.bounds.height/2).rotate(cannon.angle);

如何获得旋转的矢量,在正确的位置发射炮弹。见下图。 enter image description here

UPDATE 我也尝试了以下,同样的结果球向左移动

Vector2 rotPos = world.CannonBody.getWorldVector( world.CannonBody.getPosition() );

2 个答案:

答案 0 :(得分:0)

您描述问题的方式,您只针对一个案例解决了问题。这真的只是一个数学问题。想想你要射击的方向,大炮的枪管,作为圆圈上的坐标。

既然您知道角度,这很容易。在中心画一个带圆点的圆圈。然后从中心到右边缘画一条线。然后从第一行向上绘制另一条45度角的线。用直线连接边缘上的两个点。你现在有一个三角形。

让我们调用45度角线'r'。我们将调用第一行x和最后一行y。

你应该有这样的东西: http://i.stack.imgur.com/MJNWZ.jpg

我们知道sin(angleInRadians)= y / r。做一个小代数我们可以把它改成r * sin(angleInRadians)= y

轰,你有y坐标。

几乎相同的事情:cos(angleInRadians)= x / r

所以r * cos(angleInRadians)= x

你的x坐标。

你可以直接从box2d获得一个身体的角度,这很容易。您只需要为'r'选择一个值,该值表示您用于概念化给定角度的大炮炮筒的圆的正确半径。如果大炮围绕圆心旋转,那么r就是你的大炮的长度。

答案 1 :(得分:0)

我有一个类似于你的问题。这是一个答案的问题:

Android. How to move object in the direction it is facing (using Vector3 and Quaternion)

你需要像

这样的东西
translation.set(baseDirection).rot(modelInstance.transform).nor()