Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/201.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 具有旋转的二维边界框碰撞_Java_Android_Collision Detection - Fatal编程技术网

Java 具有旋转的二维边界框碰撞

Java 具有旋转的二维边界框碰撞,java,android,collision-detection,Java,Android,Collision Detection,我目前正在为android开发一款简单的空间游戏。我的碰撞检测将使用矩形和圆形边界框来完成。这些边界框需要能够旋转,所以我的问题是:检测旋转矩形和圆之间的碰撞的最佳方法是什么?感谢您的帮助:一般来说,边界框只定义对象的边界,一个由对象的最大和最小X&Y顶点生成的形状-这使得计算更加简单,边界框不需要旋转,因为它们的目的很简单,正如我所解释的。如果要将它们用于碰撞检测,只需检查圆心加上半径是否与两个轴上的矩形相交,例如: public boolean boxintersectscircle(Bou

我目前正在为android开发一款简单的空间游戏。我的碰撞检测将使用矩形和圆形边界框来完成。这些边界框需要能够旋转,所以我的问题是:检测旋转矩形和圆之间的碰撞的最佳方法是什么?感谢您的帮助:

一般来说,边界框只定义对象的边界,一个由对象的最大和最小X&Y顶点生成的形状-这使得计算更加简单,边界框不需要旋转,因为它们的目的很简单,正如我所解释的。如果要将它们用于碰撞检测,只需检查圆心加上半径是否与两个轴上的矩形相交,例如:

public boolean boxintersectscircle(BoundingBox box, BoundingCircle circle) {
    if (box.x > circle.centerx+circle.radius) return false;
    if (box.y > circle.centery+circle.radius) return false;
    if (box.x+box.width < circle.centerx-circle.radius) return false;
    if (box.y+box.height < circle.centery-circle.radius) return false;
    return true;
}

然而,边界框并不准确-它们可能会留下大量未占用的空间,因此,如果这让游戏玩家感到沮丧,我个人会实施分离轴定理或线/圆检测。

通常,边界框只定义对象的边界,由对象的最大值和最小值的X和Y的顶点生成的形状-这使计算变得更简单,边界框不需要旋转,因为它们的用途很简单,正如我所解释的。如果要将它们用于碰撞检测,只需检查圆心加上半径是否与两个轴上的矩形相交,例如:

public boolean boxintersectscircle(BoundingBox box, BoundingCircle circle) {
    if (box.x > circle.centerx+circle.radius) return false;
    if (box.y > circle.centery+circle.radius) return false;
    if (box.x+box.width < circle.centerx-circle.radius) return false;
    if (box.y+box.height < circle.centery-circle.radius) return false;
    return true;
}

然而,边界框并不精确——它们可能会留下大量未占用的空间,因此,如果您的游戏玩家感到沮丧,我个人会实施分离轴定理或线/圆检测。

好的,我已经解决了我自己的问题!当圆与矩形相交时,只有两种情况: 1.圆的中心在矩形内 2.圆与矩形的一条边相交 为了检查碰撞,我首先检查圆心是否在矩形内,然后根据矩形的旋转旋转圆心,以简化我的计算。如果圆心在矩形内,我知道有一个交点,返回true。
如果第一个检查返回false,那么我检查矩形的每一侧和圆之间的交点。如果存在交叉点,我将返回true。如果有人需要代码,请随时发表评论,谢谢大家的帮助!:

好的,我已经解决了我自己的问题!当圆与矩形相交时,只有两种情况: 1.圆的中心在矩形内 2.圆与矩形的一条边相交 为了检查碰撞,我首先检查圆心是否在矩形内,然后根据矩形的旋转旋转圆心,以简化我的计算。如果圆心在矩形内,我知道有一个交点,返回true。
如果第一个检查返回false,那么我检查矩形的每一侧和圆之间的交点。如果存在交叉点,我将返回true。如果有人需要代码,请随时发表评论,谢谢大家的帮助!:

如果边界框不旋转,这将是很好的。这个问题涉及到旋转边界框。我会更好地使用不涉及边界框的解决方案吗?我的印象是,如果一个边界框旋转,它仍然是一个边界框…我不能无限期地说什么样的解决方案对你来说是最好的,因为我不知道你的游戏我在按照街机游戏“小行星”的思路思考,但是如果你想要完美的碰撞检测,我推荐分离轴定理。这很好,如果未旋转边界框。这个问题涉及到旋转边界框。我会更好地使用不涉及边界框的解决方案吗?我的印象是,如果一个边界框旋转,它仍然是一个边界框…我不能无限期地说什么解决方案对你来说是最好的,因为我不知道你的游戏我想沿着街机游戏“小行星”的路线,但如果你想要完美的碰撞检测,我推荐分离轴定理。你用的是发动机还是什么?当你使用现有的游戏引擎而不是自己构建所有东西时,解决方案可能会有所不同?在矩形的每一侧取样N个点,检查是否有任何点在圆内。我很好奇数学上更有效的方法是什么。对不起,我没有使用引擎,只使用本机代码。我对最有效的方法很感兴趣,因为它能更好地检测碰撞。你是用引擎还是别的什么?当你使用现有的游戏引擎而不是自己构建所有东西时,解决方案可能会有所不同?在矩形的每一侧取样N个点,检查是否有任何点在圆内。
我很好奇数学上更有效的方法是什么。对不起,我没有使用引擎,只使用本机代码。我肯定对最有效的方法感兴趣,因为它将导致更好的碰撞检测