@dotalogobl

Как добавить построение прямоугольника, являющегося общей частью(пересечением) 2-х прямоугольников?

У меня есть задание: Составить описание класса прямоугольника со сторонами, параллельными осям координат. Предусмотреть возможность перемещения прямоугольника на плоскости, изменение размеров, построение наименьшего прямоугольника, содержащего 2 заданных прямоугольника и прямоугольник, являющегося общей частью(пересечением) 2-х прямоугольников.

Тут есть перемещение, изменение размера, но я не могу понять, что с построением прямоугольника, являющегося общей частью(пересечением) 2-х прямоугольников! тут есть функция sovm, которая строит наименьший прямоугольник, содержащий 2 заданных прямоугольника. помогите добавить построение прямоугольника, являющегося общей частью(пересечением) 2-х прямоугольников.

class Rectangle
        {
        public static bool brake = false;
        int x, y, Width, Height;
        
       public Rectangle(int x, int y, int Width, int Height) 
        {
            this.x = x;
            this.y = y;
            this.Width = Width; //Ширина 
            this.Height = Height; //Высота
        }// Создаем конструктор 
        
       
        public void perem(int l, int h, ref int x, ref int y)
        {
            x -= l;
            y -= h;
        }

        public void sovm(int x1, int x2, int y1, int y2, int Width1, int Width2, int Height1, int Height2)
        {

            if (x1 > x2)
            {
                int buf = x1;
                x1 = x2;
                x2 = buf;
            }
            if (x1 + Width1 < x2 + Width2)
            {
                x = x1;
                Width = x2 - x1 + Width2;
            }
            else
            {
                x = x1;
                Width = Width2;
            }
            ////////////////////////
            if (y1 > y2)
            {
                int buf = y1;
                y1 = y2;
                y2 = buf;
            }
            if (y1 + Height1 < y2 + Height2)
            {
                y = y1;
                Height = y2 - y1 + Height2;
            }
            else
            {
                y = y1;
                Height = Height2;
            }
            Console.WriteLine("x={0},y={1},Ширина={2},Высота={3}", x, y, Width, Height);
        }

        public void izm(int x, int y, ref int shirina, ref int visota)
        {
            shirina -= x;
            visota -= y;
        }

        public void show(int x, int y, int shirina, int visota)
        {
            Console.WriteLine("{0} {1} {2} {3}", x, y, shirina, visota);
        }
    }
    


    public class Program
    {
        public static void Main(string[] args)
        {
            Console.WriteLine("Строим 1 прямоугольник по левой нижней точке, высоте и длине");
            
            Console.WriteLine("Варианты команд:\n Переместить Изменить Показать Совместить Exit");

            ////////////////////////////////////////////////////////////////////////////////
            Console.WriteLine("Введите x");
            int x = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("Введите y");
            int y = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("Введите ширину");
            int Width = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("Введите высоту");
            int Height = Convert.ToInt32(Console.ReadLine());
            ///////////////////////////////////////////////////////////////////////////////////
            Console.WriteLine("Строим 2 прямоугольник по левой нижней точке, высоте и длине");
            Console.WriteLine("Введите x");
            int x2 = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("Введите y");
            int y2 = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("Введите ширину");
            int Width2 = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("Введите высоту");
            int Height2 = Convert.ToInt32(Console.ReadLine());
            ////////////////////////////////////////////////////////////////////////////////////
             Rectangle rect1 = new Rectangle(x, y, Width, Height);

            
            // Здесь менять на сколько перемещать и изменять.
            int izmx = 1, izmy = 1;
            int perx = 1, pery = 1;
            
            Console.WriteLine("Введите комманду");
            do
            {
                switch (Console.ReadLine())
                {
                    case "Perem": rect1.perem(perx, pery, ref x, ref y); break;
                    case "Izm": rect1.izm(izmx, izmy, ref Width, ref Height); break;
                    case "Show": rect1.show(x, y, Width, Height); break;
                    case "Sovm": rect1.sovm(x, x2, y, y2, Width, Width2, Height, Height2); break;
                    case "Exit": Rectangle.brake = true; break;
                    default: Console.WriteLine("Не, ну это не серьёзно, вводи!"); break;
                }
            } while (!Rectangle.brake);
        }
    }
  • Вопрос задан
  • 160 просмотров
Пригласить эксперта
Ответы на вопрос 1
@right_click
static Rectangle peresechenie(Rectangle rect1 ,Rectangle rect2)
{
int rect1X,rect2X,rect1Y,rect2Y,Widht,hieght;

rect1X = Math.Max(rect1.x,rect2.x);
rect2X= Math.Min(rect1.Width+rect1.x, rect2.Width+rect2.x);

rect1Y=Math.Max(rect1.y,rect2.y);
rect2Y =Math.Min(rect1.y+rect1.Height,rect2.y+rect2.Height);

Widht = rect2X -rect1X;
hieght=rect2Y- rect1Y;
return new Rectangle(rect1X,rect1Y,Widht,hieght);
}
//без проверок будет ли вообще пересечения у них
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы