Главная » 2025 » Ноябрь » 23 » Класс URect: координаты и размеры прямоугольной области
19:43
Класс URect: координаты и размеры прямоугольной области

Класс URect: координаты и размеры прямоугольной области

Класс URect описывает координаты и размеры прямоугольной области в целочисленных значениях. Инструкция импорта:

from unicross_image.uhelper import URect

Форматы конструктора класса:

URect(x, y, width, height)
URect( (x, y, width, height) )
URect(urect)

В первом конструкторе указываются координаты левого верхнего угла и размеры области через запятую. Если значения не могут быть приведены к целому числу или размеры меньше или равны 0, то будет сгенерировано исключение. Пример:

r = URect(10, 20, 200, 100)
print(r)        # URect(x=10, y=20, width=200, height=100)
print(repr(r))  # (10, 20, 200, 100)

Во втором конструкторе можно передать значения в виде кортежа или списка:

r = URect( (10, 20, 200, 100) )
print(r)        # URect(x=10, y=20, width=200, height=100)
r = URect( [10, 20, 200, 100] )
print(r)        # URect(x=10, y=20, width=200, height=100)

Третий конструктор создает объект на основе другого объекта:

r1 = URect( (10, 20, 200, 100) )
r2 = URect(r1)
print(r2)        # URect(x=10, y=20, width=200, height=100)

Создать объект на основе координат позволяет статический метод coordinates(x, y, x + width, y + height):

r = URect.coordinates(10, 20, 210, 120)
print(r)  # URect(x=10, y=20, width=200, height=100)

Сравнить два объекта URect можно с помощью операторов == и !=:

r1 = URect(10, 20, 200, 100)
r2 = URect(10, 20, 200, 100)
r3 = URect(0, 0, 200, 100)
print(r1 == r2)  # True
print(r1 == r3)  # False

print(r1 != r2)  # False
print(r1 != r3)  # True

Класс URect поддерживает итерации, поэтому объект можно преобразовать в кортеж или список, а также перебрать поэлементно с помощью циклов:

r = URect(1, 2, 3, 4)
print(tuple(r))    # (1, 2, 3, 4)
print(list(r))     # [1, 2, 3, 4]
for i in r:
    print(i, end=", ")
# 1, 2, 3, 4,

Пример распаковки объекта:

r = URect(10, 20, 200, 100)
x, y, width, height = r
print(x, y, width, height) # 10 20 200 100

Перечислим методы класса URect:

  • get_x() и get_y() — возвращают координаты левого верхнего угла по осям X и Y соответственно. Пример:
r = URect(10, 20, 200, 100)
print(r.get_x())  # 10
print(r.get_y())  # 20
  • get_point() — возвращает координаты левого верхнего угла в виде кортежа. Пример:
r = URect(10, 20, 200, 100)
print(r.get_point())  # (10, 20)
  • get_upoint() — возвращает объект UPoint с координатами левого верхнего угла. Пример:
r = URect(10, 20, 200, 100)
print(r.get_upoint())  # UPoint(x=10, y=20)
  • get_point_max() — возвращает координаты (x + width, y + height) в виде кортежа. Обратите внимание, точка находится вне прямоугольника на 1 px правее по диагонали. Пример:
r = URect(10, 20, 200, 100)
print(r.get_point_max())  # (210, 120)
  • get_upoint_max() — возвращает объект UPoint с координатами (x + width, y + height). Обратите внимание, точка находится вне прямоугольника на 1 px правее по диагонали. Пример:
r = URect(10, 20, 200, 100)
print(r.get_upoint_max())  # UPoint(x=210, y=120)
  • get_point_bottom_right() — возвращает координаты правого нижнего угла в виде кортежа . Пример:
r = URect(10, 20, 200, 100)
print(r.get_point_bottom_right())         # (209, 119)
print(r.get_point_max())                  # (210, 120)
  • get_upoint_bottom_right() — возвращает объект UPoint с координатами правого нижнего угла. Пример:
from unicross_image.uhelper import URect, UPoint
r = URect(10, 20, 200, 100)
print(r.get_upoint_bottom_right())         # UPoint(x=209, y=119)
print(r.get_upoint_max())                  # UPoint(x=210, y=120)
print(r.contains_point(UPoint(209, 119)))  # True
print(r.contains_point(UPoint(210, 120)))  # False
  • get_width() и get_height() — возвращают ширину и высоту соответственно. Пример:
r = URect(10, 20, 200, 100)
print(r.get_width())   # 200
print(r.get_height())  # 100
  • get_size() — возвращает размеры в виде кортежа. Пример:
r = URect(10, 20, 200, 100)
print(r.get_size())  # (200, 100)
  • get_usize() — возвращает объект USize с размерами области. Пример:
r = URect(10, 20, 200, 100)
print(r.get_usize())  # USize(width=200, height=100)
  • get_rect() — возвращает координаты левого верхнего угла и размеры в виде кортежа. Пример:
r = URect(10, 20, 200, 100)
print(r.get_rect())  # (10, 20, 200, 100)

Можно также преобразовать объект в кортеж с помощью функции tuple() или выполнить распаковку:

r = URect(10, 20, 200, 100)
print(tuple(r))            # (10, 20, 200, 100)
x, y, width, height = r
print(x, y, width, height) # 10 20 200 100
  • get_urect() — возвращает объект URect с координатами левого верхнего угла и размерами области. Пример:
r = URect(10, 20, 200, 100)
print(r.get_urect())  # URect(x=10, y=20, width=200, height=100)
  • intersects(urect) — возвращает значение True, если прямоугольные области пересекаются, и False — в противном случае. Пример:
r1 = URect(0, 0, 100, 200)
r2 = URect(100, 0, 10, 20)
print(r1.intersects(r2))  # False
r3 = URect(99, 0, 10, 20)
print(r1.intersects(r3))  # True
  • intersection(urect) — возвращает объект с областью пересечения двух областей, и None — если области не пересекаются. Пример:
r1 = URect(0, 0, 100, 200)
r2 = URect(100, 0, 10, 20)
print(r1.intersection(r2))  # None
r3 = URect(99, 0, 10, 20)
print(r1.intersection(r3)) # URect(x=99, y=0, width=1, height=20)

Можно также воспользоваться оператором &:

r1 = URect(0, 0, 100, 200)
r2 = URect(100, 0, 10, 20)
print(r1 & r2)  # None
r3 = URect(99, 0, 10, 20)
print(r1 & r3)  # URect(x=99, y=0, width=1, height=20)
  • contains_point(upoint) — возвращает значение True, если указанная точка (объект класса UPoint) находится внутри прямоугольника, и False — в противном случае. Пример:
from unicross_image.uhelper import URect, UPoint
r = URect(0, 0, 100, 200)
print(r.contains_point(UPoint(0, 0)))    # True
print(r.contains_point(UPoint(30, 20)))  # True
print(r.contains_point(UPoint(99, 0)))   # True
print(r.contains_point(UPoint(0, 199)))  # True
print(r.contains_point(UPoint(100, 0)))  # False
print(r.contains_point(UPoint(0, 200)))  # False
print(r.contains_point(UPoint(-1, -1)))  # False
  • contains_rect(urect) — возвращает значение True, если указанный прямоугольник (объект класса URect) находится внутри текущего прямоугольника, и False — в противном случае. Пример:
r1 = URect(1, 1, 5, 3)
r2 = URect(1, 1, 5, 3)
print(r1.contains_rect(r2))    # True
r2 = URect(1, 1, 3, 3)
print(r1.contains_rect(r2))    # True
r2 = URect(3, 2, 3, 2)
print(r1.contains_rect(r2))    # True
r2 = URect(3, 1, 3, 2)
print(r1.contains_rect(r2))    # True
r2 = URect(1, 2, 5, 2)
print(r1.contains_rect(r2))    # True
r2 = URect(0, 0, 6, 4)
print(r1.contains_rect(r2))    # False
r2 = URect(2, 2, 5, 3)
print(r1.contains_rect(r2))    # False
  • union(urect) — возвращает прямоугольник (объект класса URect), описывающий область, в которую входит текущий прямоугольник и указанный прямоугольник (объект класса URect). Пример:
r1 = URect(1, 1, 5, 3)
r2 = URect(1, 1, 5, 3)
print(r1.union(r2))    # URect(x=1, y=1, width=5, height=3)
r2 = URect(0, 0, 5, 3)
print(r1.union(r2))    # URect(x=0, y=0, width=6, height=4)
r2 = URect(2, 2, 5, 3)
print(r1.union(r2))    # URect(x=1, y=1, width=6, height=4)
r2 = URect(6, 4, 5, 3)
print(r1.union(r2))    # URect(x=1, y=1, width=10, height=6)
  • area() — возвращает площадь прямоугольника. Пример:
r = URect(0, 0, 200, 100)
print(r.area())  # 20000
  • is_square() — возвращает True, если объект содержит квадрат, и False — в противном случае. Пример:
r = URect(0, 0, 5, 3)
print(r.is_square())    # False
r = URect(0, 0, 5, 5)
print(r.is_square())    # True

Класс входит в состав графической библиотеки UImage для Python 3. Описание библиотеки UImage

Категория: UImage | Просмотров: 4 | Добавил: unicross | Теги: UImage, URect | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Категории раздела
Списки слов [10]
Списки слов и словари
OCR [4]
Оптическое распознавание символов
UImage [18]
Графическая библиотека для Python
Программы [4]
Полезные программы
Прочее [3]
Другие темы
Календарь
«  Ноябрь 2025  »
Пн Вт Ср Чт Пт Сб Вс
     12
3456789
10111213141516
17181920212223
24252627282930
Архив записей