变换矩阵 - 旋转和变换后的新点坐标

时间:2013-05-26 14:26:00

标签: c++ geometry openframeworks

虽然互联网上有很多关于它的教程,但我找不到合适的解决方案!我正在画一条p1=(0,0); p2=(0,j)行,然后我做translation(h,k)rotation(a)p2的新坐标是什么?

以下是我在查看转换矩阵后附带的通用公式,但它似乎不起作用:

x' = (x*cos(a)) + (y*-sin(a)) + h
y' = (x*sin(a)) + (y*cos(a)) + k

所以我的p2

x' = (j*-sin(ofDegToRad(a))) + h
y' = (j*cos(ofDegToRad(a))) + k

我做错了什么?

编辑:

使用下面的答案上传代码,但它仍然无效(?)。我用一小段代码Here

放了一张图片

当我打印出值为x = -141.5, y = 254.9

的值时

我想得到我的线的终点(如果起点位于窗口的中间)

1 个答案:

答案 0 :(得分:3)

您显示的公式首先是旋转然后是平移,这与您说的顺序相反。如果您先进行翻译,那么:

x' = x + h
y' = y + k

所以你的p1'是(h,k),p2'是(h,j + k)。然后轮换是:

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

这意味着你的p1''是

( (h*cos(a)) - (k*sin(a)), (h*sin(a)) + (k*cos(a)) )

你的p2''是

( (h*cos(a)) - (j+k)*sin(a)), (h*sin(a)) + ((j+k)*cos(a)) ).

这些都假设你从(0,0)的理解起点开始。

相反,如果我们首先进行轮换,那么我们得到:

p1' = ( 0, 0 ) [when you rotate (0,0) you get (0,0)]
p2' = ( -j*sin(a), j*cos(a) )

然后通过(h,k)进行翻译:

p1' = ( h, k )
p2' = ( h - j*sin(a), k + cos(a) )