Я написал оба из них для исправления прямоугольников. Например, если у прямоугольника есть эти свойства:
X: 32, Y: 32, ширина: -32, высота: -32
Это сделает прямоугольник X: 0, Y: 0, Ширина: 32, Высота: 32
if (r.Width < 0)
{
r.X -= Math.Abs(r.Width);
r.Width = Math.Abs(r.Width);
}
if (r.Height < 0)
{
r.Y -= Math.Abs(r.Height);
r.Height = Math.Abs(r.Height);
}
Вот # 2
r.X -= Math.Abs(Math.Min(0, r.Width));
r.Width = Math.Abs(r.Width);
r.Y -= Math.Abs(Math.Min(0, r.Height));
r.Height = Math.Abs(r.Height);
Они оба работают просто отлично. Мой вопрос какой? Я чувствую, что первый может быть быстрее и более читабельным, но второй имеет меньше строк кода. Кроме того, я чувствую, что это то, что, возможно, уже изобретено. Есть ли метод, который делает это уже в .NET или XNA Framework?
Спасибо !!
Редактировать: Кто-то опубликовал сокращенную версию второго способа, которая мне действительно нравится, и объединил ее в это:
r = new Rectangle(r.X + Math.Min(0, r.Width), r.Y + Math.Min(0, r.Height), Math.Abs(r.Width), Math.Abs(r.Height));
Честно говоря, я предпочитаю меньше строк большему, и я не думаю, что это слишком сложно. Во всяком случае, я могу разместить комментарий или инкапсулировать его в метод с описательным именем.