Многие из нас знакомы с подходом к вращению двумерного вектора вокруг начала координат с учетом угла theta
:
newX = x * cos(theta) - y * sin(theta);
newY = x * sin(theta) + y * cos(theta);
Я сейчас пытаюсь повернуть координаты в UV-пространстве изображения, которое выглядит так:
(Изображение заимствовано у этого ТАКОГО вопроса.)
Здесь единицы измерения по оси u
шире, чем по оси v
, поэтому приведенный выше подход приводит к вращению координат вокруг эллипса, а не круга. Мне нужно, чтобы вектор вращался так, как если бы координаты были квадратными, то есть необходимо учитывать соотношение сторон. Я подумал, что это будет так же просто, как растянуть координаты в квадратное пространство, повернуть, а затем растянуть назад, хотя кажется, что векторы вращаются эллиптически:
newX = (x * cos(theta) * Aspect - y * sin(theta)) / Aspect;
newY = x * sin(theta) * Aspect + y * cos(theta);
Любая помощь приветствуется, спасибо заранее!