using System;
namespace Lab_6_prog
{
class Rectangle // Составить описание класса прямоугольников.
// Предусмотреть возможность перемещения прямоугольников на плоскости,
// изменение размеров, построение наименьшего прямоугольника,
// содержащего два заданных прямоугольника, и прямоугольника, являющегося общей частью (пересечением) двух прямоугольников.
{
public int c;
public int z;
private static Rectangle t;
public Rectangle(int c, int z)
{
this.c = c;
this.z = z;
}
public static Rectangle operator +(Rectangle a, Rectangle b) // перегрузка +
{
Rectangle.t = new Rectangle(1, 1);
t.c = a.c * b.z + a.z * b.c;
t.z = a.z * b.z;
Rectangle.SetFormat(t);
return t;
}
private static void SetFormat(Rectangle t)
{
throw new NotImplementedException();
}
public Rectangle(int x, int y, int shirina, int dlina)
{
this.X = x;
this.Y = y;
this.Width = shirina;
this.Height = dlina;
}
public int X { get; set; } // метод считывания и присвоения
public int Y { get; set; }
public int Width { get; set; }
public int Height { get; set; }
public void Offset(int x, int y) // смещение Х и У
{
X += x;
Y += y;
}
public static Rectangle Peresechenie(Rectangle a, Rectangle b) // метод пересечения прямоугольников
{
int maxStartX = Math.Max(a.X, b.X);
int minEndX = Math.Min(a.X + a.Width, b.X + b.Width);
int MaxStartY = Math.Max(a.Y, b.Y);
int minEndY = Math.Min(a.Y + a.Height, b.Y + b.Height);
if (minEndX >= maxStartX && minEndY >= MaxStartY)
{
return new Rectangle(maxStartX, MaxStartY, minEndX - maxStartX, minEndY - MaxStartY);
}
return null;
}
public static Rectangle Obedinenie(Rectangle a, Rectangle b) // метод объединения прямоугольников
{
int minStartX = Math.Min(a.X, b.X);
int maxEndX = Math.Max(a.X + a.Width, b.X + b.Width);
int minStartY = Math.Min(a.Y, b.Y);
int MaxEndY = Math.Max(a.Y + a.Height, b.Y + b.Height);
return new Rectangle(minStartX, minStartY, maxEndX - minStartX, MaxEndY - minStartY);
}
public override string ToString()
{
return String.Format("X:{0} Y:{1} W:{2} H:{3}", X, Y, Width, Height);
}
}
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Первый прямоугольник");
Console.Write("Введите Х: ");
int x = Convert.ToInt32(Console.ReadLine());
Console.Write("Введите У: ");
int y = Convert.ToInt32(Console.ReadLine());
Console.Write("Введите ширину первого прямоугольника: ");
int shirina = Convert.ToInt32(Console.ReadLine());
Console.Write("Введите высоту первого прямоугольника: ");
int visota = Convert.ToInt32(Console.ReadLine());
Rectangle r1 = new Rectangle(x, y, shirina, visota);
r1.Offset(5, 0); // смещение
Console.WriteLine("Второй прямоугольник");
Console.Write("Введите Х2: ");
int x2 = Convert.ToInt32(Console.ReadLine());
Console.Write("Введите У2: ");
int y2 = Convert.ToInt32(Console.ReadLine());
Console.Write("Введите ширину второго прямоугольника: ");
int shirina2 = Convert.ToInt32(Console.ReadLine());
Console.Write("Введите высоту второго прямоугольника: ");
int visota2 = Convert.ToInt32(Console.ReadLine());
Rectangle r2 = new Rectangle(x2, y2, shirina2, visota2);
Console.Write("Пересечение прямоугольников: " + Rectangle.Peresechenie(r1, r2));
Console.Write("\nОбъединение прямоугольников: " + Rectangle.Obedinenie(r1, r2));
Console.ReadKey();
}
}
}
Считается ли эта часть кода за перегрузку ?
public static Rectangle operator +(Rectangle a, Rectangle b) // перегрузка +
{
Rectangle.t = new Rectangle(1, 1);
t.c = a.c * b.z + a.z * b.c;
t.z = a.z * b.z;
Rectangle.SetFormat(t);
return t;
}