Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.02.2013, 21:21   #1
gylayko
Форумчанин
 
Регистрация: 14.09.2011
Сообщений: 203
По умолчанию Составить описание класса прямоугольника со сторонами, параллельными осям координат

Задание:Составить описание класса прямоугольника со сторонами, параллельными осям координат. Предусмотреть возможность перемещения прямоугольника на плоскости, изменение размеров, построение наименьшего прямоугольника, содержащего 2 заданных прямоугольника и прямоугольник, являющегося общей частью(пересечением) 2-х прямоугольников.
Я вот нашел тут на форуме
Код:
public class rectangle
    {
        public static bool brake = false;
        int x, y, shirina, visota;
 
        public rectangle(int x, int y, int shirina, int visota)
        {
            this.x = x;
            this.y = y;
            this.shirina = shirina;
            this.visota = visota;
        }
        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 shirina1, int shirina2, int visota1, int visota2)
        {
 
            if (x1 > x2)
            {
                int buf = x1;
                x1 = x2;
                x2 = buf;
            }
            if (x1 + shirina1 < x2 + shirina2)
            {
                x = x1;
                shirina = x2 - x1 + shirina2;
            }
            else
            {
                x = x1;
                shirina = shirina2;
            }
            ////////////////////////
            if (y1 > y2)
            {
                int buf = y1;
                y1 = y2;
                y2 = buf;
            }
            if (y1 + visota1 < y2 + visota2)
            {
                y = y1;
                visota = y2 - y1 + visota2;
            }
            else
            {
                y = y1;
                visota = visota2;
            }
            Console.WriteLine("x={0},y={1},shirina={2},visota={3}", x, y, shirina, visota);
        }
 
 
 
        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);
        }
 
    }
    //-----------------------------------------------------------------------------------------------------------------------
    class Go
    {
        static void Main(string[] args)
        {
 
            Console.WriteLine("Строим по левой нижней точке, высоте и длине");
            Console.WriteLine("Варианты команд:\n Perem Izm Show Sovm Exit");
            Console.WriteLine("Введите x");
            int x = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("Введите y");
            int y = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("Введите ширину");
            int shirina = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("Введите высоту");
            int visota = Convert.ToInt32(Console.ReadLine());
            int x2 = 3, y2 = 2, shirina2 = 3, visota2 = 2;
            rectangle rect1 = new rectangle(x, y, shirina, visota);
            // Здесь менять на сколько перемещать и изменять.
            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 shirina, ref visota); break;
                    case "Show": rect1.show(x, y, shirina, visota); break;
                    case "Sovm": rect1.sovm(x, x2, y, y2, shirina, shirina2, visota, visota2); break;
                    case "Exit": rectangle.brake = true; break;
                    default: Console.WriteLine("Не, ну это не серьёзно, вводи!"); break;
                }
            } while (!rectangle.brake);
        }
    }
тут есть перемещение, изменение размера, но я не могу понять, что с построением прямоугольника, являющегося общей частью(пересечением) 2-х прямоугольников! тут есть функция sovm, которая строит наименьший прямоугольник, содержащий 2 заданных прямоугольника. помогите добавить построение прямоугольника, являющегося общей частью(пересечением) 2-х прямоугольников.
gylayko вне форума Ответить с цитированием
Старый 23.02.2013, 21:38   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
 public void ob(rectangle r)
{
  int x,y,l,w;
  x=(this.x>r.x)?this.x:r.x;
  y=(this.y>r.y)?this.y:r.y;
  
  l=((this.x+this.shirina)>(r.x+r.shirina))?this.shirina:r.shirina;
  w=((this.y+this.visota)>(r.y+r.visota))?this.visota:r.visota;

 И строим прямоугольник с координатами x, y и шириной и высотой l, w
}
Это если я не ошибаюсь.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 23.02.2013, 21:38   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
 public void ob(rectangle r)
{
  int x,y,l,w;
  x=(this.x>r.x)?this.x:r.x;
  y=(this.y>r.y)?this.y:r.y;
  
  l=((this.x+this.shirina)>(r.x+r.shirina))?this.shirina:r.shirina;
  w=((this.y+this.visota)>(r.y+r.visota))?this.visota:r.visota;

 И строим прямоугольник с координатами x, y и шириной и высотой l, w
}
Это если я не ошибаюсь.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Целочисленные координаты трех вершин прямоугольника, стороны которого параллельны координатным осям qpuTuJlb Помощь студентам 5 10.11.2012 10:03
задача в Delphi:Составить описание класса многочленов от одной переменной, задаваемых степенью многочлена и массивом коэффициентов Nyasha Помощь студентам 1 08.11.2012 08:28
ООП: Составить описание класса для определения одномерных массивов целых цисел (векторов) Kuzu Паскаль, Turbo Pascal, PascalABC.NET 0 18.10.2012 00:23
описание класса SvetaLee Помощь студентам 1 30.10.2010 23:27
Описание класса. frem-dag Общие вопросы C/C++ 4 11.01.2010 19:53