簡體   English   中英

Android-位圖碰撞檢測(旋轉)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM