使用纵横比旋转2D矢量
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用纵横比旋转2D矢量相关的知识,希望对你有一定的参考价值。
我们中的许多人都熟悉在给定角度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);
任何帮助表示赞赏,提前谢谢!
答案
旋转和纵横比的一般版本是:
(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
希望有所帮助。
以上是关于使用纵横比旋转2D矢量的主要内容,如果未能解决你的问题,请参考以下文章