Класс UPoint: координаты точки (тип int)
Класс UPoint описывает целочисленные координаты точки в двумерном пространстве. Инструкция импорта:
from unicross_image.uhelper import UPoint
Форматы конструктора класса:
UPoint()
UPoint(x, y)
UPoint( (x, y) )
UPoint(upoint)
Первый конструктор создает объект с нулевыми координатами:
p = UPoint()
print(p) # UPoint(x=0, y=0)
print(repr(p)) # (0, 0)
Вместо этого конструктора можно использовать статический метод ZERO():
p = UPoint.ZERO()
print(p) # UPoint(x=0, y=0)
print(repr(p)) # (0, 0)
Во втором конструкторе указываются две координаты через запятую. Если значения не могут быть приведены к целому числу, то будет сгенерировано исключение. Пример:
p = UPoint(10, 20)
print(p) # UPoint(x=10, y=20)
print(repr(p)) # (10, 20)
В третьем конструкторе координаты указываются в виде кортежа или списка. Если значения не могут быть приведены к целому числу, то будет сгенерировано исключение. Пример:
p = UPoint( (10, 20) )
print(p) # UPoint(x=10, y=20)
p = UPoint( [30, 40] )
print(p) # UPoint(x=30, y=40)
Четвертый конструктор создает объект на основе другого объекта класса UPoint:
p1 = UPoint( (10, 20) )
p2 = UPoint(p1)
print(p2) # UPoint(x=10, y=20)
Сравнить два объекта UPoint можно с помощью операторов == и !=:
p1 = UPoint(10, 20)
p2 = UPoint(10, 20)
p3 = UPoint(30, 40)
print(p1 == p2) # True
print(p1 == p3) # False
print(p1 != p2) # False
print(p1 != p3) # True
Класс UPoint поддерживает итерации, поэтому объект можно преобразовать в кортеж или список, а также перебрать поэлементно с помощью циклов:
p = UPoint(1, 2)
print(tuple(p)) # (1, 2)
print(list(p)) # [1, 2]
for i in p:
print(i, end=", ")
# 1, 2,
Пример распаковки объекта:
p = UPoint(10, 20)
x, y = p
print(x, y) # 10 20
Перечислим методы класса UPoint:
get_x() и get_y() — возвращают координаты по осям X и Y соответственно. Пример:
p = UPoint(10, 20)
print(p.get_x()) # 10
print(p.get_y()) # 20
get_point() — возвращает координаты в виде кортежа. Пример:
p = UPoint(10, 20)
print(p.get_point()) # (10, 20)
Можно также преобразовать объект в кортеж с помощью функции tuple() или выполнить распаковку:
p = UPoint(10, 20)
print(tuple(p)) # (10, 20)
x, y = p
print(x, y) # 10 20
get_upoint() — создает копию объекта. Пример:
p = UPoint(10, 20)
print(p.get_upoint()) # UPoint(x=10, y=20)
get_upointf() — создает объект UPointF с вещественными координатами на основе текущего объекта. Пример:
p = UPoint(10, 20)
print(p.get_upointf()) # UPointF(x=10.0, y=20.0)
add(upoint) — сложение векторов. Пример:
p1 = UPoint(30, 40)
p2 = UPoint(10, 20)
print(p1.add(p2)) # UPoint(x=40, y=60)
Можно также воспользоваться оператором +:
p1 = UPoint(30, 40)
p2 = UPoint(10, 20)
print(p1 + p2) # UPoint(x=40, y=60)
subtract(upoint) — вычитание векторов. Пример:
p1 = UPoint(30, 40)
p2 = UPoint(10, 20)
print(p1.subtract(p2)) # UPoint(x=20, y=20)
Можно также воспользоваться оператором -:
p1 = UPoint(30, 40)
p2 = UPoint(10, 20)
print(p1 - p2) # UPoint(x=20, y=20)
multiply(factor) — умножение вектора на скаляр. Пример:
p = UPoint(10, 20)
print(p.multiply(5)) # UPoint(x=50, y=100)
Можно также воспользоваться оператором *:
p = UPoint(10, 20)
print(p * 5) # UPoint(x=50, y=100)
division(factor) — целочисленное деление вектора на целочисленный скаляр. Пример:
p = UPoint(10, 20)
print(p.division(5)) # UPoint(x=2, y=4)
Если значение параметра равно 0,то возвращается значение None:
p = UPoint(10, 20)
print(p.division(0)) # None
Можно также воспользоваться оператором /:
p = UPoint(10, 20)
print(p / 5) # UPoint(x=2, y=4)
print(p / 0) # None
magnitude() — возвращает длину вектора. Пример:
import math
p = UPoint(10, 20)
print(p.magnitude()) # 22.360679774997898
print(math.sqrt(10 ** 2 + 20 ** 2)) # 22.360679774997898
distance(upoint) — возвращает расстояние между двумя точками. Пример:
p1 = UPoint(10, 20)
p2 = UPoint(50, 20)
p3 = UPoint(10, 20)
print(p1.distance(p2)) # 40.0
print(p1.distance(p3)) # 0.0
rotate(deg) — поворот против часовой стрелки на deg градусов. Положительная ось Y направлена вверх, как в традиционной математике. Возвращается новый объект UPoint. Пример:
p = UPoint(10, 20)
print(p.rotate(180)) # UPoint(x=-10, y=-20)
rotate_about(p, deg) — поворот против часовой стрелки на deg градусов относительно точки p. Положительная ось Y направлена вверх, как в традиционной математике. Возвращается новый объект UPoint. Пример:
p = UPoint(10, 20)
p2 = UPoint(0, 0)
print(p.rotate_about(p2, 180)) # UPoint(x=-10, y=-20)
Класс входит в состав графической библиотеки UImage для Python 3. Описание библиотеки UImage