Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 18.01.2022
Сообщений: 3
.NET 6

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

30.06.2022, 18:24. Показов 654. Ответов 1

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

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


C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
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 Move(int dx, int dy) // Метод чтобы передвигать 
        {
            x += dx;
            y += dy;
        }
        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);
        }
    }
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
30.06.2022, 18:24
Ответы с готовыми решениями:

Нахождение координат прямоугольника (1) вписанного в окружность 2) являющийся пересечением прямоугольников)
Доброго времени суток. Если небольшие две задачки. 1) Нахождение координат прямоугольника, вписанного в заданную окружность с...

Определить концы отрезка, являющегося пересечением всех заданных отрезков
Помогите пожалуйста написать код к заданию. Дано целое N&gt; 2 и действительные числа a1, b1, ... an, bn. (ai, bi). Рассматривая пары...

Найти площадь области, являющейся пересечением всех данных прямоугольников
Как известно, дети часто не любят делиться игрушками. Особенно сложно дела с игрушками обстоят одной в семье, в которой n детей. Пока...

1
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16140 / 11264 / 2888
Регистрация: 21.04.2018
Сообщений: 33,110
Записей в блоге: 2
30.06.2022, 20:30
Цитата Сообщение от gertos12 Посмотреть сообщение
тут есть функция sovm, которая строит наименьший прямоугольник
Чё-то вы не то накодили.
Сигнатура метода должна быть такой:
C#
1
2
3
4
public Rectangle MinRect(Rectangle other)
{
    // Some Code
}
Можно добавить статическую перегрузку:
C#
1
2
3
4
5
6
public static Rectangle MinRect(Rectangle first, Rectangle second)
{
    // Some Code
}
public Rectangle MinRect(Rectangle other)
     => MinRect(this, other);

Цитата Сообщение от gertos12 Посмотреть сообщение
void perem
А это что за диковинный метод?

Цитата Сообщение от gertos12 Посмотреть сообщение
public void show
Ещё одна диковинка.
Удалите его и задайте переопреltление ToStaring().

Цитата Сообщение от gertos12 Посмотреть сообщение
izm(int x, int y, ref int shirina, ref int visota)
Какая-то диковинная перегрузка.
Зачем вы, вообще, используете ref параметры.
Вам же нужно работать со значениями экземпляра, а не каких-то мифических передаваемых из вне метода.

Цитата Сообщение от gertos12 Посмотреть сообщение
public static bool brake = false;
Ещё одно чудо-юдо.
Удалите его.

Цитата Сообщение от gertos12 Посмотреть сообщение
int x, y, Width, Height;
А почему x, y с маленькой буквы, а Width, Height с большой?
Чем вызвано такое "уважение" к полям ширины и высоты?


А в целом - замените все поля на свойства.
Вы же должны как-то "снаружи" получать параметры созданного прямоугольника.
C#
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
publix double X0 {get; private set;}
publix double Y0 {get; private set;}
 
private double _width;
publix double Width {
    get => _width; 
    private set => _width = (value < 0 ? 0 : value);
}
 
private double _height;
publix double Height {
    get => _height; 
    private set => _height = (value < 0 ? 0 : value);
}
 
publix double X1 => X0 + Width;
publix double Y1 => Y0 + Height;
 
public Rectangle(int x, int y, int width, int height)
    => (X, Y, Width, Height) = (x, y, width, height);
Цитата Сообщение от gertos12 Посмотреть сообщение
построение прямоугольника, являющегося общей частью(пересечением) 2-х прямоугольников
Наверное как-то так:
C#
1
2
3
4
5
6
7
8
9
10
public static Rectangle Intersect(Rectangle first, Rectangle second)
{
    double xLeft = Math.Max(first.X0, second.X0);
    double yTop = Math.Max(first.Y0, second.Y0);
 
    double xRight = Math.Min(first.X1, second.X1);
    double yBottom = Math.Min(first.Y1, second.Y1);
 
    return new Rectangle(xLeft, yTop, xRight - xLeft, yBottom - yTop);
}
P.S. Пишу здесь, без Студии.
Могут быть мелкие ошибки.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
30.06.2022, 20:30
Помогаю со студенческими работами здесь

Два прямоугольника заданы координатами своих вершин. Найдите площадь фигуры, являющейся их пересечением
Два прямоугольника заданы координатами своих вершин. Найдите площадь фигуры, являющейся пересечением этих прямоугольников.

Координатная плоскость, построение двух функций с пересечением
Здравствуйте, мне нужна помощь. Нужно координатную плоскость расчертить по единичным отрезкам, и найти точку пересечения двух...

Найти площадь общей части прямоугольников
На плоскости нарисованы два прямоугольника П1 и П2, стороны которых параллельны осям координат. Найти площадь S общей части прямоугольников...

Найти площадь общей части прямоугольников.
Два прямоугольника заданы целочисленными координатами пары диагональных вершин в прямоугольной системе координат, причем их стороны...

Нахождение общей площади, образованной объединением прямоугольников
Я встал в ступор. И заранее извиняюсь, что не послал тему в алгоритмы, потому что я ее не нашел. Я правда не понимаю как решить данную...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
Программный отбор значений справочника
Maks 21.03.2026
Установка программного отбора значений справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит предопределенное значение перечислений. Процедура. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru