0

基本上我有一个矩形网格,每个 75x75,并排。我将一个对象放入这些矩形中,当我放置对象时,我需要找出它与 MOST 相交的矩形。

它很可能看起来像这样:

private Rectangle placeObject(Vector2 cursorPosition)
{
    Rectangle HolderRectangle;
    Rectangle r1 =  new Rectangle((int)cursorPosition.Position.X, (int)cursorPosition.Position.Y, 70, 70);    

    Foreach( Rectangle r in rectangles)
    {
        r2 = new Rectangle((int)r.Position.X, (int)r.Position.Y, 75,75)
        if( r1.Intersects(r2))
        {
            //Check how much it intersects
            //if it intersects more than the current holder Rectangle
            //set HolderRectangle = r2
        }
    }
    return HolderRectangle; 
}

我要问的甚至可能吗?如果有怎么办?感谢所有回复=)

4

3 回答 3

3

如果所有矩形的大小相同,您可以只取它的中心,您要检查其交叉点的中心,测量两点之间的长度并对其他矩形执行相同的操作。

于 2013-02-11T17:24:50.213 回答
0

我相信您正在寻找的是重叠矩形的区域。

看到这个线程:

什么是找到重叠矩形区域的有效算法

于 2013-02-12T21:24:12.563 回答
0

如果这只是为了放置在网格中,您当然不必遍历所有“矩形”

您知道网格组件的尺寸,在本例中为 75x75。如果您将 X 和 Y 位置除以 75,您就知道它属于哪个网格元素,如果您的相机可以滚动,则必须考虑偏移量。

考虑到您的示例仅显示了一个矩形列表,我猜您的 2D 地图实际上只是一个一维数组。您可以通过[y * numRectsPerRow + x]

我不知道你的项目的背景,但我猜你不想让你的网格长时间由一堆矩形表示。

于 2013-02-11T17:43:55.997 回答