将矩形夹在较大的矩形内

本文关键字: | 更新日期: 2023-09-27 18:29:28

假设我有一个带有的XNA矩形

X = 0, Y = 0, Width = 25, Height = 25.

我想要的是一种将另一个矩形夹在里面的方法,这样较小的矩形就不会"离开"较大矩形的边界。

例如,如果我用制作一个新的矩形

X = 23, Y = 20, Width = 10, Height = 10,

我希望该方法返回一个矩形:

X = 23, Y = 20, Width = 2, Height = 5.

此外,如果我用制作一个新的矩形

X = -8, Y = 8, Width = 10, = 10,

我希望该方法返回一个矩形:

X = 0, Y = 8, Width = 2, Height = 10.

与此同时,我开始夹紧。尽管如此,它还是包含了大量丑陋的代码,所以新的问题是,我如何简化它?

if (SelectionRectangle.X < 0)
        {
            SelectionRectangle.Width = SelectionRectangle.Width + SelectionRectangle.X;
            SelectionRectangle.X = 0;
        }
        if (SelectionRectangle.X + SelectionRectangle.Width > tileset.Width)
        {
            if (SelectionRectangle.X > tileset.Width)
            {
                SelectionRectangle.X = tileset.Width;
                SelectionRectangle.Width = 0;
            }
            else
            {
                SelectionRectangle.Width = tileset.Width - SelectionRectangle.X;
            }
        }
        if (SelectionRectangle.Y < 0)
        {
            SelectionRectangle.Height = SelectionRectangle.Height + SelectionRectangle.Y;
            SelectionRectangle.Y = 0;
        }
        if (SelectionRectangle.Y + SelectionRectangle.Height > tileset.Height)
        {
            if (SelectionRectangle.Y > tileset.Height)
            {
                SelectionRectangle.Y = tileset.Height;
                SelectionRectangle.Height = 0;
            }
            else
            {
                SelectionRectangle.Height = tileset.Height - SelectionRectangle.Y;
            }
        }

将矩形夹在较大的矩形内

这不就是Rectangle.Intersect吗?

创建一个矩形,定义一个矩形与另一个矩形重叠的区域。

如果较小的矩形完全在较大的矩形内,则交点将与较小的矩形相同。如果较小的矩形延伸到较大的矩形之外,则不会返回该部分。

这样的东西怎么样:

    Rectangle clamp(Rectangle smaller, Rectangle larger)
    {
        Rectangle ret;
        ret.X = Math.Max(smaller.X, larger.X);
        ret.Y = Math.Max(smaller.Y, larger.Y);
        ret.Width = Math.Min(smaller.X + smaller.Width, larger.X + larger.Width) - ret.X;
        ret.Height = Math.Min(smaller.Y + smaller.Height, larger.Y + larger.Height) - ret.Y;
        return ret;
    }
private void ClampRectangle(Rectangle outside, Rectangle inside) {
    if(inside.left < outside.left) {
        inside.width -= outside.left - inside.left;
        inside.left = outside.left
    }
    if(inside.right > outside.right) {
        inside.width -= inside.right - outside.right;
    }
    if(inside.top < outside.top) {
        inside.height -= outside.top - inside.top;
        inside.top = outside.top;
    }
    if(inside.bottom > outside.bottom) {
        inside.height -= inside.height - outside.height;
    }
}

我刚在这里输入了代码,所以请检查拼写错误
我不确定属性是否有大写字母(height/height…)

相关文章:
  • 没有找到相关文章