假设我有一个带
的XNA矩形X = 0, Y = 0, Width = 25, Height = 25.
我想要的是一种在内部夹住另一个矩形的方法,这样较小的矩形永远不会“离开”较大的矩形。
例如,如果我用:
创建一个新的RectangleX = 23, Y = 20, Width = 10, Height = 10,
我希望该方法返回一个Rectangle:
X = 23, Y = 20, Width = 2, Height = 5.
另外,如果我用:
创建一个新的RectangleX = -8, Y = 8, Width = 10, = 10,
我希望该方法返回一个Rectangle:
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;
}
}
答案 0 :(得分:2)
这不仅仅是Rectangle.Intersect
吗?
创建一个Rectangle,用于定义一个矩形与另一个矩形重叠的区域。
如果较小的矩形完全在较大的矩形内,则交点将与较小的矩形相同。如果较小的矩形延伸到较大的矩形之外,则不会返回该部分。
答案 1 :(得分:0)
这样的事情怎么样:
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;
}
答案 2 :(得分:0)
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;
}
}
我只是在这里输入代码,因此请检查拼写错误 我不确定这些属性是否有大写字母(高度/高度......)