Повернуть точку относительно другой точки в градусах python

Если у вас была точка (в 2d), как бы вы могли повернуть эту точку пополам вокруг другой точки (начало координат) в python?

Вы можете, например, наклонить первую точку вокруг начала координат на 10 градусов.

В принципе у вас есть одна точка PointA и начало координат, вокруг которой она вращается. Код может выглядеть примерно так:

PointA=(200,300)
origin=(100,100)

NewPointA=rotate(origin,PointA,10) #The rotate function rotates it by 10 degrees

Ответ 1

Следующая функция rotate выполняет поворот точки point на угол angle (против часовой стрелки, в радианах) вокруг origin, в декартовой плоскости, с обычными условными обозначениями оси: x, увеличивающийся слева справа, y увеличиваясь вертикально вверх. Все точки представлены как длина-2 кортежа формы (x_coord, y_coord).

import math

def rotate(origin, point, angle):
    """
    Rotate a point counterclockwise by a given angle around a given origin.

    The angle should be given in radians.
    """
    ox, oy = origin
    px, py = point

    qx = ox + math.cos(angle) * (px - ox) - math.sin(angle) * (py - oy)
    qy = oy + math.sin(angle) * (px - ox) + math.cos(angle) * (py - oy)
    return qx, qy

Если ваш угол указан в градусах, вы можете сначала преобразовать его в радианы, используя math.radians. Для вращения по часовой стрелке отрицайте угол.

Пример: вращение точки (3, 4) вокруг начала координат (2, 2) против часовой стрелки на угол 10 градусов:

>>> point = (3, 4)
>>> origin = (2, 2)
>>> rotate(origin, point, math.radians(10))
(2.6375113976783475, 4.143263683691346)

Обратите внимание, что некоторые очевидные повторные вычисления в функции rotate: math.cos(angle) и math.sin(angle) вычисляются дважды, как и px - ox и py - oy. Я оставляю это для вас, чтобы определить это, если это необходимо.