2015-10-18 40 views
0

所以我設置的所有東西想必創建碰撞檢測,但是我很茫然,以我將如何ckeck碰撞..Java的碰撞檢測與3D頂點座標

所以我對象我有一堆與我一起工作,但一個簡單的BoundingBox我可能只需要這些變量在這裏:

System.out.println("width: " + width); 
System.out.println("height: " + height); 
System.out.println("depth: " + depth); 
System.out.println("center[" + xPos+ "/" +yPos+ "/" +zPos+"]"); 

所以我想是一些代碼,允許如果兩個BoundingBoxes我ckeck互相交流,爲此編寫代碼應該不會太難,但我真的很困難,所以我會很感激任何幫助!

我有兩個AABB與mentionned屬性:

private void AABB_1() 
} 
// (width,height,depth,xPos,yPos,zPos) 
} 

private void AABB_2() 
} 
// (width,height,depth,xPos,yPos,zPos) 
} 

在BoundingBox的方法,我要檢查兩個AABB的的interesction並設置一個布爾值,無論是或真或假:

public void BoundingBox() 
{ 
    AABB_1(); 
    AABB_2(); 

    boolean intersection; 

// check if AABB_1 and AABB_2 intersect each other 
// If yes set intersection = true 
// If no set intersection = false  
} 

這裏在BoundingBox方法將是碰撞檢測,但正如我所說我不知道​​我將如何cckck交集,有任何想法?

回答

0

考慮1D第一:

//(minX---maxX) 
//Non overlap cases: 
//a: |----|  
//b:  |----| 

//a:  |----| 
//b: |----| 

public static void intersectOnX(a,b){ 
    if (b.minX > a.maxX || a.minX > b.maxX) 
    return false;//no intersect 
    else 
    return true;//intersect 
} 

重複此爲每個額外的維度:

public static void intersect(a,b){ 
    if (!intersectOnX(a,b)) 
    return false;//no intersect 

    if (!intersectOnY(a,b)) 
    return false;//no intersect 

    if (!intersectOnZ(a,b)) 
    return false;//no intersect 

    return true;//intersect! 
} 
+0

謝謝,(a和b)是什麼?他們是浮動變量嗎?從哪裏得到最小和最大x,y,z? – DisasterCoder

+0

A和b是代表你的邊界體積的一些類。並閱讀你的其他意見,你必須知道什麼是最小和最大。 – weston

+0

您說過:「我計算了obj文件中頂點的最小值和最大值的寬度,高度和深度」,這是我正在使用的最小值和最大值。 – weston

0

假設你有一個盒子一箇中心,三個延伸,也可以寫一個盒子方法

boolean overlaps(Box other){ 
    return 
     Math.abs(xPos - other.xPos) <= (width + other.width)/2 
     && 
     Math.abs(yPos - other.yPos) <= (depth + other.depth)/2 
     && 
     Math.abs(zPos - other.zPos) <= (height + other.height)/2; 
} 

(檢查x,y,z和寬度,深度,高度是否相關)

如果你只是有一些變量存儲這些6 + 6的值,你可以編寫表達式爲例如。

Number x1, y1, z1, w1, d1, h1; 
Number x2, y2, z2, w2, d2, h2; 

boolean overlaps = 
    Math.abs(x1 - x2) <= (w1 + w2)/2 
    && 
    Math.abs(y1 - y2) <= (d1 + d2)/2 
    && 
    Math.abs(z1 - z2) <= (h1 + h2)/2; 
+0

謝謝,我將如何檢查與這種衝突,我真的不明白我將如何在我的代碼中實現這一點,你能否詳細說明一下? – DisasterCoder

+0

那麼,我沒有看到太多的代碼,而我所看到的並沒有什麼幫助。也許你添加代表長方體(或「盒子」)的類的代碼和一個可以看到兩個需要檢查碰撞的「盒子」對象的片段。 – laune

+0

我還沒有盒子,但寬度,高度和中心位置只有兩個不同的值,現在我想利用這些信息,但是怎麼做? – DisasterCoder