Ответсообщение недоступно
class Rectangle:
def __init__(self, p1, p2):
# Сохраняем как есть, без округления
self.p1 = p1
self.p2 = p2
def perimeter(self):
return round((abs(self.p1[0] - self.p2[0]) + abs(self.p1[1] - self.p2[1])) * 2, 2)
def area(self):
return round(abs(self.p1[0] - self.p2[0]) * abs(self.p1[1] - self.p2[1]), 2)
def get_pos(self):
# Возвращаем левый верхний угол
return (round(min(self.p1[0], self.p2[0]), 2),
round(max(self.p1[1], self.p2[1]), 2))
def get_size(self):
return (round(abs(self.p1[0] - self.p2[0]), 2),
round(abs(self.p1[1] - self.p2[1]), 2))
def move(self, x, y):
# Сдвигаем обе точки
self.p1 = (self.p1[0] + x, self.p1[1] + y)
self.p2 = (self.p2[0] + x, self.p2[1] + y)
def resize(self, width, height):
# Меняем размер, сохраняя левый верхний угол
left = min(self.p1[0], self.p2[0])
top = max(self.p1[1], self.p2[1])
self.p1 = (left, top)
self.p2 = (left + width, top - height)
def turn(self):
# Поворот относительно центра
center_x = (self.p1[0] + self.p2[0]) / 2
center_y = (self.p1[1] + self.p2[1]) / 2
# Вектор от центра до p1
dx = self.p1[0] - center_x
dy = self.p1[1] - center_y
# Поворачиваем на 90 градусов
self.p1 = (center_x - dy, center_y + dx)
self.p2 = (center_x + dy, center_y - dx)
def scale(self, factor):
# Масштабирование относительно центра
center_x = (self.p1[0] + self.p2[0]) / 2
center_y = (self.p1[1] + self.p2[1]) / 2
self.p1 = (center_x - (center_x - self.p1[0]) * factor,
center_y - (center_y - self.p1[1]) * factor)
self.p2 = (center_x + (self.p2[0] - center_x) * factor,
center_y + (self.p2[1] - center_y) * factor)