2

我知道这可能有一个简单的数学解决方案,但我只是无法得到它(没有做一些冗长的过程)。

假设我有一个 1200 像素宽 x 800 像素高的横向图像......然后图像顺时针旋转 90、180 或 270 度。

如果在旋转图像上选择了一个点(坐标),我如何确定原始非旋转图像上的坐标是什么?

举个简单的例子:如果上面的图像旋转 180 度,然后将坐标设置为 100、100(左上角)......相同的坐标将是 1100、700(右下角)在非旋转图片。

语法明智,我试图在 Javascript 中计算它

谢谢!

4

2 回答 2

3

数学上正式的方法是使用旋转矩阵

例如逆时针 90 度旋转,旋转矩阵为:

R(90) = [0 -1]
        [1  0]

矩阵乘法公式为:

[x90] = [0 -1][x]
[y90]   [1  0][y]

使用矩阵乘法将其扩展为标准符号:

x90 = -y;
y90 =  x;

请注意,它围绕原点 [0, 0] 旋转,因此您必须进行归一化才能获得所有 +ve 坐标。用javascript编写,这将是这样的:

x90 = ymax - y;
y90 = x;

这里 [x,y] 是原始坐标,[x90, y90] 是旋转后的坐标,[xmax, ymax] 是原始图像的宽度和高度。

对于 180 度,旋转矩阵为:

R(180) = [-1  0]
         [ 0 -1]  

转换为 javascript,规范化:

x180 = xmax - x;
y180 = ymax - y;

对于逆时针 270 度,旋转矩阵为:

R(270) = [ 0 1]
         [-1 0]  

转换为 javascript,规范化:

x270 = y;
y270 = xmax - x;
于 2013-11-13T17:33:29.713 回答
0

这个关于 MathOverflow 的类似问题和答案应该是你想要的。

tl;博士:

x' = x*cos(θ) - y*sin(θ)
y' = x*sin(θ) + y*cos(θ)

{x,y}您的原点、θ旋转角度和{x',y'}新点在哪里。

于 2013-11-13T17:15:07.387 回答