Многие из нас знакомы с подходом к вращению 2D вектора вокруг начала координат с учетом угла theta
:
newX = x * cos(theta) - y * sin(theta);
newY = x * sin(theta) + y * cos(theta);
Я сейчас пытаюсь повернуть координаты в изображении УФ-пространства, которое выглядит так:
(Изображение заимствовано из этот ТАК вопрос.)
Здесь единицы u
оси шире, чем у v
ось, поэтому подход выше приводит к координатам, вращающимся вокруг эллипса, а не круга. Мне нужно, чтобы вектор вращался так, как если бы координаты были квадратными, то есть необходимо учитывать соотношение сторон. Я думал, что это будет так же просто, как растянуть координаты в квадратное пространство, вращать, а затем растягивать назад, хотя кажется, что векторы вращаются эллиптически:
newX = (x * cos(theta) * Aspect - y * sin(theta)) / Aspect;
newY = x * sin(theta) * Aspect + y * cos(theta);
Любая помощь приветствуется, спасибо заранее!
Общая версия для вращения и соотношения сторон:
(center_c, center_y) является центром вращения
(aspect_x, aspect_y) является аспектом
tmp_x = (x-center_x)/aspect_x
tmp_y = (y-center_y)/aspect_y
tmp_x = tmp_x * cos(theta) - tmp_y * sin(theta)
tmp_x = tmp_x * sin(theta) + tmp_y * cos(theta)
new_x = aspect_x*tmp_x-center_x
new_y = aspect_y*tmp_x-center_y
Надеюсь, это поможет.
Других решений пока нет …