[英]Android - Bitmap collision detection (rotated)
我已經知道矩形的矩形碰撞檢測,但是這次我有2個旋轉的位圖。 我的意思是,我有普通的位圖+一個稱為“方向”的float變量,告訴位圖在繪制時必須沿哪個方向旋轉。
但是,如何確定其中兩個對象是否相互碰撞? 如果您可以說兩個旋轉的矩形之間的碰撞檢測是如何工作的,也就足夠了……或者您可以發布一些代碼...
謝謝您的幫助(如果您花時間閱讀本文或思考答案,則謝謝)
通常,您將需要使用“ 分離軸定理”來確定兩個旋轉的矩形是否發生碰撞。 但是,有一種簡單的方法可以在使用SAT之前確定矩形是否正在碰撞,這樣您就不必進行不必要的處理。 您可以進行邊界圓檢查,通過證明矩形的邊界圓不相交來證明矩形不相交。
矩形的邊界圓共享其中心,並且其直徑等於矩形的任一對角線的長度。 本質上,如果圓不相交,則矩形也不能相交。
我不確定您如何執行旋轉,但是如果您使用Shape / Area類型的對象,則可以使用AffineTransform
進行旋轉,然后在每個旋轉對象的Area上使用intersects()
來檢查它們是否發生碰撞,這樣可以避免您自己實施。 考慮以下示例:
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!");
}
}
}
您顯然可以修改它以適合您的實現-我希望這可以為您指明正確的方向。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.