【发布时间】:2018-09-02 22:57:16
【问题描述】:
我们中的许多人都熟悉在给定角度theta 的情况下围绕原点旋转二维矢量的方法:
newX = x * cos(theta) - y * sin(theta);
newY = x * sin(theta) + y * cos(theta);
我现在正在尝试旋转图像 UV 空间中的坐标,如下所示:
(图片借自this SO question。)
这里u 轴的单位比v 轴的单位宽,因此上述方法导致坐标围绕椭圆而不是圆旋转。我需要旋转矢量以使坐标看起来像正方形,这意味着需要考虑纵横比。我认为它就像将坐标拉伸到方形空间一样简单,旋转,然后向后拉伸,尽管看起来矢量仍然是椭圆旋转的:
newX = (x * cos(theta) * Aspect - y * sin(theta)) / Aspect;
newY = x * sin(theta) * Aspect + y * cos(theta);
任何帮助表示赞赏,在此先感谢!
【问题讨论】:
-
您的方法看起来不错。也许您对 Aspect 使用了错误的值?尝试使用 1/你现在使用的值。
-
所以你想要“0.5 |顶部 1 英寸点与矩形边的水平中线相交?
标签: c++ vector rotation aspect-ratio