2013-06-24 87 views
1

有沒有什麼辦法可以知道在libgdx中的兩個矩形之間的矩形區域,就像c#中的矩形一樣?http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.rectangle.intersect.aspxLibgdx - 從Rectangle.overlap(矩形)獲取交集矩形

我需要得到這兩個矩形之間的交集矩形區域,但libgdx中的重疊方法僅返回布爾值,而不管兩個矩形是否相交。 我已閱讀Intersector類,但它沒有提供任何操作。

回答

8

事實上,LibGDX沒有內置此功能,所以我會做這樣的事情:

/** Determines whether the supplied rectangles intersect and, if they do, 
* sets the supplied {@code intersection} rectangle to the area of overlap. 
* 
* @return whether the rectangles intersect 
*/ 
static public boolean intersect(Rectangle rectangle1, Rectangle rectangle2, Rectangle intersection) { 
    if (rectangle1.overlaps(rectangle2)) { 
     intersection.x = Math.max(rectangle1.x, rectangle2.x); 
     intersection.width = Math.min(rectangle1.x + rectangle1.width, rectangle2.x + rectangle2.width) - intersection.x; 
     intersection.y = Math.max(rectangle1.y, rectangle2.y); 
     intersection.height = Math.min(rectangle1.y + rectangle1.height, rectangle2.y + rectangle2.height) - intersection.y; 
     return true; 
    } 
    return false; 
} 
+0

好像我可以使用這個,謝謝! – Algorithman

+0

這實際上正是libgdx庫所做的。它爲相交返回true或false,但也設置提供的第三個矩形作爲矩形的交集區域。不知道在OP提出問題之後是否提供了功能,但是將其放在此處供其他人查找。 – Aterxerxes

+0

是的,我在提供這個答案後不久就向libgdx添加了相同的內容。 –

2

我想稍有變化添加到NEX軟件的答案。如果你想要得到的值存儲在源矩形的一個這種人會甚至工作:

public static boolean intersect(Rectangle r1, Rectangle r2, Rectangle intersection) { 
    if (!r1.overlaps(r2)) { 
     return false; 
    } 

    float x = Math.max(r1.x, r2.x); 
    float y = Math.max(r1.y, r2.y); 
    float width = Math.min(r1.x + r1.width, r2.x + r2.width) - x; 
    float height = Math.min(r1.y + r1.height, r2.y + r2.height) - y; 
    intersection.set(x, y, width, height); 

    return true; 
} 

下面是一個例子usege:

Rectangle r1 = new Rectangle(); 
Rectangle r2 = new Rectangle(); 

// ... 

intersect(r1, r2, r1); 
4

可以使用Intersector類。

import com.badlogic.gdx.math.Intersector; 

Intersector.intersectRectangles(rectangle1, rectangle2, intersection);