gpt4 book ai didi

java - Android - 位图碰撞检测(旋转)

转载 作者:行者123 更新时间:2023-11-30 04:27:25 24 4
gpt4 key购买 nike

我已经知道矩形碰撞检测,但这次我有 2 个旋转位图。我的意思是,我有普通位图 + 一个称为“方向”的浮点变量,并告诉位图必须在绘图时旋转的方向。

但是我如何确定其中两个物体是否相互碰撞?如果您能告诉我两个旋转矩形之间的碰撞检测是如何工作的,那也足够了……或者您可以发布一些代码……

如果你能提供帮助,谢谢你(如果你花时间阅读本文或思考答案,谢谢你)

最佳答案

通常,您需要使用 Separating Axis Theorem确定两个旋转的矩形是否发生碰撞。但是有一种简单的方法可以在使用 SAT 之前判断矩形是否发生碰撞,这样您就不必进行不必要的处理。您可以进行边界圆检查,通过证明矩形的边界圆不相交来证明矩形不相交。

矩形的外接圆共享其中心并且直径等于矩形任一对角线的长度。本质上,如果圆不相交,则矩形也不相交。

我不确定您是如何执行旋转的,但是如果您使用的是形状/区域类型的对象,则可以使用 AffineTransform 执行旋转,然后使用 intersects() 在每个旋转对象的 Area 上检查它们是否发生碰撞,这样可以避免您自己实现它。考虑以下示例:

import java.awt.Rectangle;
import java.awt.geom.AffineTransform;
import java.awt.geom.Area;

public class Main {

public static void main(String args[]) {
//Create rectangle
Rectangle rect = new Rectangle(10, 10, 10, 10);
//Create transformation object
AffineTransform af = new AffineTransform();
//Rotate the rectangle by 45 degrees
af.rotate(Math.PI/4, rect.x, rect.y);

Rectangle rect2 = new Rectangle(20, 20, 20, 20);
AffineTransform bf = new AffineTransform();
bf.rotate(Math.PI/4, rect2.x, rect2.y);

//Create Area objects based off of the Rectangle objects
Area areaA = new Area(rect);
//Set the Area object to be the same as the Rectangle object
areaA = areaA.createTransformedArea(af);
Area areaB = new Area(rect2);
areaB = areaB.createTransformedArea(bf);

//Check if the objects collide by using their Area equivalent
if (areaA.intersects(areaB.getBounds())) {
System.out.println("Collision!");
}
}
}

显然,您可以修改它以适应您的实现 - 我希望这能为您指明正确的方向。

关于java - Android - 位图碰撞检测(旋转),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8248635/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com