从矩形交叉点返回一个矩形?

时间:2013-05-20 13:23:16

标签: actionscript-3 math intersection

一直在努力想出一个解决方案来返回一个代表两个矩形之间实际交叉点的矩形。

我正在寻找的是这样的: MSDN - Rectangle::Intersect Method (Rectangle, Rectangle)

如图所示,我希望从两个矩形的交叉点返回绿色的矩形。不是一些布尔值true或false。

Rect intersection data

我会接受代码样本或简单理论作为答案。提前谢谢!

2 个答案:

答案 0 :(得分:6)

查看您需要的Rectangle.intersection()方法。

基准intersectionmin/max计算:

    var t:int = getTimer();

    var r3:Rectangle = new Rectangle();
    var r1:Rectangle = new Rectangle(0, 0, 100, 100);
    var r2:Rectangle = new Rectangle(50, 50, 100, 100);
    var i:int;

    for(i = 0; i < 100000; i++)
    {
        r3.left = Math.max(r1.left, r2.left);
        r3.right = Math.min(r1.right, r2.right);
        r3.top = Math.max(r1.top, r2.top);
        r3.bottom = Math.min(r1.bottom, r2.bottom);
    }
    trace("min/max: t = ", (getTimer() - t), "ms");

    t = getTimer();
    for(i = 0; i < 100000; i++)
    {
        r3 = r1.intersection(r2);
    }
    trace("intersection: t = ", (getTimer() - t), "ms");

出:

min/max: t =  167 ms
intersection: t =  87 ms

答案 1 :(得分:4)

r3.minX = max(r1.minX, r2.minX);
r3.maxX = min(r1.maxX, r2.maxX);
r3.minY = max(r1.minY, r2.minY);
r3.maxY = min(r1.maxY, r2.maxY);

转换为Rectangle的实际表示形式是读者的练习。

如果r3.minX > r3.maxX || r3.minY > r3.maxY,则没有交集。否则,如果r3.minX == r3.maxX || r3.minY == r3.maxY,则生成的矩形是简并的。否则,你有一个正面积的实际交叉点。