我们许多人都熟悉在给定角度theta
的情况下围绕原点旋转2D向量的方法:
newX = x * cos(theta) - y * sin(theta);
newY = x * sin(theta) + y * cos(theta);
我现在正在尝试旋转图像UV空间中的坐标,如下所示:
(图像是从this问题中借来的。)
此处u
轴的单位宽于v
轴的单位,因此上述方法导致坐标围绕椭圆而不是圆旋转。我需要向量的旋转来像座标一样摆正,这意味着需要考虑纵横比。我认为这就像将坐标拉伸到一个正方形空间,然后旋转,然后向后拉伸一样简单,尽管矢量似乎仍然是椭圆旋转的:
newX = (x * cos(theta) * Aspect - y * sin(theta)) / Aspect;
newY = x * sin(theta) * Aspect + y * cos(theta);
感谢您的帮助,谢谢!
答案 0 :(得分:0)
旋转和长宽比的常规版本为:
(center_c,center_y)为旋转中心
(aspect_x,Aspect_y)是Aspect_ratio
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
希望有帮助。