(Libgdx && PhysicsEditor)2个绕不同原点旋转的物体,用于我必须始终重叠的不同检测

时间:2019-06-26 08:54:58

标签: math libgdx

由于物理编辑器的原点,我将使用Physics Editor主体进行碰撞检测,并使用b2body进行常规定位和旋转。 box2D实体的原点位于其中心,而Physics Editor实体的原点位于左下方。它们中的任何一个都不能更改原点,并且它们必须始终直接位于彼此之上。由于原点的不同,因此将PE主体设置为Box2D主体的位置会导致PE主体位于Box2D主体的左上角。它们需要重叠。我需要一个数学公式来设置PE主体的变换。 I.E如果它们具有相同的原点,则代码将如下所示:PEBody.setTransform(box2DBody.getPosition.x, box2DBody.getPosition.y, box2DBody.getAngle();,但是由于原点不同(同样,我无法更改),该代码将导致以下结果:https://www.youtube.com/watch?v=UeXB6nrGePg

由于我不太擅长数学,所以我不确定,但是我认为这与三角学有关,我正在寻找的东西是这样的:PEBody.setTransform(box2DBody.getPosition.x - *some formula based on box2DBody.getAngle()*, box2DBody.getPosition.y - *some formula based on box2DBody.getAngle()*, box2DBody.getAngle();

1 个答案:

答案 0 :(得分:0)

假设下面的图像是theta(旋转角度)为零的地方,

theta = 0

然后下面的代码行应该起作用:

PEBody.setTransform( box2DBody.getPosition.x + box2DBody.getWidth() * 0.5 * cos(box2DBody.getAngle()) + box2DBody.getHeight() * 0.5 * sin(box2DBody.getAngle()), box2DBody.getPosition.y + box2DBody.getHeight() * 0.5 * cos(box2DBody.getAngle()) + box2DBody.getWidth() * 0.5 * sin(box2DBody.getAngle()), box2DBody.getAngle()

.getWidth().getHeight()替换为您用来获取主体的宽度和高度的任何函数,并同样替换sin()cos()