math - (Libgdx && PhysicsEditor) 2 个围绕不同原点旋转的物体,用于我需要始终重叠的不同检测
问题描述
由于物理编辑器原点,我使用物理编辑器主体进行碰撞检测,并使用 b2body 进行一般定位和旋转。box2D 主体的原点位于其中心,而物理编辑器主体的原点位于左下方。它们中的任何一个都不能更改原点,并且它们需要始终直接位于彼此之上。由于将 PE 主体设置为 Box2D 主体位置的原点不同,导致 PE 主体位于 Box2D 主体的左上角。它们需要重叠。我需要一个数学公式来设置 PE 身体的变换。IE 如果它们具有相同的原点,则代码将如下所示:PEBody.setTransform(box2DBody.getPosition.x, box2DBody.getPosition.y, box2DBody.getAngle();
但由于原点不同(同样,我无法更改),该代码导致:https: //www.youtube。
由于我的数学不太好,我不完全确定,但我认为这与三角函数有关,我正在寻找的是这样的:PEBody.setTransform(box2DBody.getPosition.x - *some formula based on box2DBody.getAngle()*, box2DBody.getPosition.y - *some formula based on box2DBody.getAngle()*, box2DBody.getAngle();
解决方案
假设下图是 theta(旋转角度)为零的位置,
那么下面的代码行应该可以工作:
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()
and替换.getHeight()
为您用于获取主体宽度和高度的任何函数,同样用于sin()
and cos()
。
推荐阅读
- javascript - 如何在每个循环中对 Json 对象进行分组
- r - R:将数据框中的一个变量的变量从 int 更改为 chr
- regex - 我只想捕获第一个匹配项
- python - 在 python 中加入具有不同条件和分隔符的列表
- javascript - $.getJSON API 的 Cordova 问题
- reason - How to send actions between components?
- php - 什么是定义的(“ABSPATH”)或死();对于非 wordpress SQL
- python-pptx - Python-pptx:更新或更改现有图表数据
- python - Django:int() 的无效文字,基数为 10:'csrfmiddlewaretoken'
- hibernate - JPA Criteria:向下转换根到多个实体子类并按相同的链接实体自然 ID 过滤