Редактировать: перепроверенные знаки для левого верхнего угла
По сути, вам нужно определить центр прямоугольника (и вращения).
Пусть полуширина прямоугольника равна w
, половина высотыh
.Таким образом, угловые координаты относительно центра после поворота на угол fi
равны
x' = -w * cos(fi) - h * sin(fi)
y' = -w * sin(fi) + h * cos(fi)
, а центр равен
cx = x - x'
cy = y - y'
И угловые координаты без вращения:
x0 = cx - w
y0 = cy + h
Код Python:
import math
def getPositionWithoutRotation(rotation, x, y, width, height):
angleRadian = (rotation * math.pi) / 180
xRelativeToCenter = - (width / 2) * math.cos(angleRadian) - (height / 2) * math.sin(angleRadian)
yRelativeToCenter = -(width / 2) * math.sin(angleRadian) + (height / 2) * math.cos(angleRadian)
cx = x - xRelativeToCenter
cy = y - yRelativeToCenter
x0 = cx - (width / 2)
y0 = cy + (height / 2)
return x0, y0
print(getPositionWithoutRotation(-30, -0.37, 1.37, 2, 2))
print(getPositionWithoutRotation(16, 453, 244, 139, 139))
(-1.0039745962155613, 1.0039745962155615) //OK
(469.4644840969946, 265.84910836156826) // ????