Класс UPointF: координаты точки (тип float)
Класс UPointF описывает вещественные координаты точки в двумерном пространстве. Инструкция импорта:
from unicross_image.uhelper import UPointF
Форматы конструктора класса:
UPointF()
UPointF(x, y)
UPointF( (x, y) )
UPointF(upointf)
Первый конструктор создает объект с нулевыми координатами:
p = UPointF()
print(p) # UPointF(x=0.0, y=0.0)
print(repr(p)) # (0.0, 0.0)
Вместо этого конструктора можно использовать статический метод ZERO():
p = UPointF.ZERO()
print(p) # UPointF(x=0.0, y=0.0)
print(repr(p)) # (0.0, 0.0)
Во втором конструкторе указываются две координаты через запятую. Если значения не могут быть приведены к вещественному числу, то будет сгенерировано исключение. Пример:
p = UPointF(10.0, 20.0)
print(p) # UPointF(x=10.0, y=20.0)
print(repr(p)) # (10.0, 20.0)
В третьем конструкторе координаты указываются в виде кортежа или списка. Если значения не могут быть приведены к вещественному числу, то будет сгенерировано исключение. Пример:
p = UPointF( (10.0, 20.0) )
print(p) # UPointF(x=10.0, y=20.0)
p = UPointF( [30.0, 40.0] )
print(p) # UPointF(x=30.0, y=40.0)
Четвертый конструктор создает объект на основе другого объекта класса UPointF:
p1 = UPointF(10.0, 20.0)
p2 = UPointF(p1)
print(p2) # UPointF(x=10.0, y=20.0)
Сравнить два объекта UPointF можно с помощью операторов == и !=:
p1 = UPointF(10.0, 20.0)
p2 = UPointF(10.0, 20.0)
p3 = UPointF(30.0, 40.0)
print(p1 == p2) # True
print(p1 == p3) # False
print(p1 != p2) # False
print(p1 != p3) # True
Класс UPointF поддерживает итерации, поэтому объект можно преобразовать в кортеж или список, а также перебрать поэлементно с помощью циклов:
p = UPointF(1.0, 2.0)
print(tuple(p)) # (1.0, 2.0)
print(list(p)) # [1.0, 2.0]
for i in p:
print(i, end=", ")
# 1.0, 2.0,
Пример распаковки объекта:
p = UPointF(10.0, 20.0)
x, y = p
print(x, y) # 10.0 20.0
Перечислим методы класса UPointF:
get_x() и get_y() — возвращают координаты по осям X и Y соответственно. Пример:
p = UPointF(10.0, 20.0)
print(p.get_x()) # 10.0
print(p.get_y()) # 20.0
get_point() — возвращает координаты в виде кортежа. Пример:
p = UPointF(10.0, 20.0)
print(p.get_point()) # (10.0, 20.0)
Можно также преобразовать объект в кортеж с помощью функции tuple() или выполнить распаковку:
p = UPointF(10.0, 20.0)
print(tuple(p)) # (10.0, 20.0)
x, y = p
print(x, y) # 10.0 20.0
get_upointf() — создает копию объекта. Пример:
p = UPointF(10.0, 20.0)
print(p.get_upointf()) # UPointF(x=10.0, y=20.0)
get_upoint() — создает объект UPoint с целочисленными координатами на основе текущего объекта. Пример:
p = UPointF(10.0, 20.0)
print(p.get_upoint()) # UPoint(x=10, y=20)
add(upointf) — сложение векторов. Пример:
p1 = UPointF(30.0, 40.0)
p2 = UPointF(10.0, 20.0)
print(p1.add(p2)) # UPointF(x=40.0, y=60.0)
Можно также воспользоваться оператором +:
p1 = UPointF(30.0, 40.0)
p2 = UPointF(10.0, 20.0)
print(p1 + p2) # UPointF(x=40.0, y=60.0)
subtract(upointf) — вычитание векторов. Пример:
p1 = UPointF(30.0, 40.0)
p2 = UPointF(10.0, 20.0)
print(p1.subtract(p2)) # UPointF(x=20.0, y=20.0)
Можно также воспользоваться оператором -:
p1 = UPointF(30.0, 40.0)
p2 = UPointF(10.0, 20.0)
print(p1 - p2) # UPointF(x=20.0, y=20.0)
multiply(factor) — умножение вектора на скаляр. Пример:
p = UPointF(10.0, 20.0)
print(p.multiply(5)) # UPointF(x=50.0, y=100.0)
Можно также воспользоваться оператором *:
p = UPointF(10.0, 20.0)
print(p * 5) # UPointF(x=50.0, y=100.0)
division(factor) — деление вектора на скаляр. Пример:
p = UPointF(10.0, 20.0)
print(p.division(5)) # UPointF(x=2.0, y=4.0)
Если значение параметра равно 0.0,то возвращается значение None:
p = UPointF(10.0, 20.0)
print(p.division(0.0)) # None
Можно также воспользоваться оператором /:
p = UPointF(10.0, 20.0)
print(p / 5.0) # UPointF(x=2.0, y=4.0)
print(p / 0.0) # None
magnitude() — возвращает длину вектора. Пример:
import math
p = UPointF(10.0, 20.0)
print(p.magnitude()) # 22.360679774997898
print(math.sqrt(10.0 ** 2 + 20.0 ** 2)) # 22.360679774997898
distance(upointf) — возвращает расстояние между двумя точками. Пример:
p1 = UPointF(10.0, 20.0)
p2 = UPointF(50.0, 20.0)
p3 = UPointF(10.0, 20.0)
print(p1.distance(p2)) # 40.0
print(p1.distance(p3)) # 0.0
rotate(deg) — поворот против часовой стрелки на deg градусов. Положительная ось Y направлена вверх, как в традиционной математике. Возвращается новый объект UPointF. Пример:
p = UPointF(10.0, 20.0)
print(p.rotate(180)) # UPointF(x=-10.000000000000002, y=-20.0)
rotate_about(upointf, deg) — поворот против часовой стрелки на deg градусов относительно точки upointf. Положительная ось Y направлена вверх, как в традиционной математике. Возвращается новый объект UPointF. Пример:
p = UPointF(10.0, 20.0)
p2 = UPointF(0.0, 0.0)
print(p.rotate_about(p2, 180))
# UPointF(x=-10.000000000000002, y=-20.0)
midpoint(upointf) — возвращает координаты точки, расположенной посередине между двумя точками. Пример:
p1 = UPointF(10.0, 20.0)
p2 = UPointF(10.0, 80.0)
print(p1.midpoint(p2)) # UPointF(x=10.0, y=50.0)
normalize() — производит нормализацию вектора. Нормализованным называется вектор с длиной равной единице. Пример:
p = UPointF(3.0, 4.0)
print(p.normalize()) # UPointF(x=0.6, y=0.8)
Действительно ли длина вектора равна единице? Давайте проверим:
p = UPointF(0.6, 0.8)
print(p.magnitude()) # 1.0
dot_product(upointf) — скалярное произведение векторов. Пример:
p1 = UPointF(3.0, 2.0)
p2 = UPointF(1.0, 4.0)
print(p1.dot_product(p2)) # 11.0
print(3.0 * 1.0 + 2.0 * 4.0) # 11.0
Класс входит в состав графической библиотеки UImage для Python 3. Описание библиотеки UImage