C#:自定义矩形类之间的交集

时间:2014-11-19 19:45:02

标签: c# unity3d intersection

我试图创建一个函数来检查我的矩形自定义类" Room"之间的重叠。 基本上我想运行循环来将我游戏中的所有房间彼此分开。

所以我希望能够检查2个房间,使用它们的起始位置(房间的左下角)以及高度和宽度来检查它们的区域是否重叠。我不确定最好的办法是什么。基本上我的想法是检查每个水平"线" /侧面对着另一个房间的垂直线,反之亦然。但是,我不确定最好的方法是什么。

提前致谢!

My Room课程基本上是:

public class Room {
    public Point position {get; set;}
    public int width {get; set;}
    public int height {get; set;}

    public Room(Point p, int w, int h) {
        position = p;
        width = w;
        height = h;
    }

    public bool Intersects(Room other) {
        //This is where I need help.
    }
}

Point看起来像这样,基本上是为了避免漂浮/双打。

public class Point {
    public int x {get; set;}
    public int y {get; set;}

    public Point(int x, int y) {
        this.x = x;
        this.y = y;
    }
}

2 个答案:

答案 0 :(得分:0)

一切都始于你的脑海,所以抓一支笔和纸:)

1。绘制一个房间和左下角的粗体,因为它是你的点(我们称之为PointA)。 2. 在Room中绘制一个Point(PointB)并检查与您的Point相关的坐标,您将看到相关性(PointB.X< = PointA + Room width和PointB.Y< = PointB +房间高度)

执行相同的切换点并记住int可以具有负值

干杯!

答案 1 :(得分:0)

一切都很简单。有很多选择 - 其中之一:

    public bool Intersects(Room other)
    {
        if (other ==  null)
            return false;

        var r1 = new { Left = this.position.X, Right = this.position.X + this.width, Bottom = this.position.Y, Top = this.position.Y + this.height };
        var r2 = new { Left = other.position.X, Right = other.position.X + other.width, Bottom = other.position.Y, Top = other.position.Y + other.height };

        return r2.Right > r1.Left && r2.Bottom < r1.Top && r2.Top > r1.Bottom && r2.Left < r1.Right;
    }