【问题标题】:Rotating a matrix in a non standard 2d plane在非标准二维平面中旋转矩阵
【发布时间】:2014-07-10 11:57:54
【问题描述】:

我在弄清楚如何在二维平面中旋转矩阵时遇到了一些问题,因为我的坐标系不是标准的数学坐标系,我的平面有一个倒置的 y 轴,这意味着屏幕上的 y 值越高。我也想顺时针旋转矩阵而不是标准逆时针旋转。

因此,如果我尝试说明我希望它如何工作:

O = 原点 X = 要旋转的点

那么0度是这样的:

XXX
 O      

我希望 90 度看起来像这样:

  X
 OX
  X

180 度应该是这样的:

 O
XXX

270 度应该是这样的:

X
XO
X

关于如何计算一个点在这个平面上旋转后的新 x 和 y 有什么想法吗?

【问题讨论】:

  • 你没有显示你的代码,但我敢打赌你实现了 X=aX+bY, Y=a'X+b'Y,这是错误的:第二个赋值中的 X 是旋转的X,而它应该是原始的。

标签: matrix rotation geometry 2d


【解决方案1】:

顺时针而不是逆时针只是意味着翻转角度上的标志。

要获得完整的结果,我们只需转换为“标准坐标”,进行旋转,然后转换回来:

坐标变换及其逆是:

(x') = ( 1  0 ) (x)
(y')   ( 0 -1 ) (y)

逆时针旋转是:

(x') = (  cos(angle) -sin(angle) ) (x)
(y')   (  sin(angle)  cos(angle) ) (y)

所以顺时针旋转是:

(x') = (  cos(angle)  sin(angle) ) (x)
(y')   ( -sin(angle)  cos(angle) ) (y)

总而言之:

(x') = ( 1  0 )(  cos(angle)  sin(angle) ) ( 1  0 )(x)
(y')   ( 0 -1 )( -sin(angle)  cos(angle) ) ( 0 -1 )(y)

将矩阵相乘得到:

(x') = (  cos(angle)  sin(angle) ) (x)
(y')   ( -sin(angle)  cos(angle) ) (y)

现在,您可能已经意识到,这实际上是与逆时针方向旋转“标准坐标”相同的矩阵。

或者在代码中:

// Angle in radians
double x2 =  cos(angle) * x1 - sin(angle) * y1;
double y2 =  sin(angle) * x1 + cos(angle) * y1;

例如,如果角度是 180 度,cos(angle)-1sin0,给出:

double x2 =  -x1;
double y2 =  -y1;

【讨论】:

  • 谢谢!我使用了代码,我得到了 0 度和 90 度的正确效果。但是在 180 度时,我的点 (-1,0) (0,0) (1,0) 变成 (1,1) (0,0) (-1,-1) (应该是 (1,0) ( 0,0) (-1,0)) 并在 270 度时变成 (-1,0) (0,0) (1,0) (应该是 (0,1) (0,0) (0, -1))
  • 查看 180 度编辑示例 - 问题出在哪里?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-12
  • 2016-08-02
  • 1970-01-01
  • 2012-09-17
  • 1970-01-01
  • 2020-01-21
  • 1970-01-01
相关资源
最近更新 更多