尽管Internet上有很多关于它的教程,但我找不到合适的解决方案!我画一条线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
我想得到我的线的终点(如果起点在窗口的中间)
最佳答案
您显示的方程式是先旋转,然后平移,这与您说的顺序相反。如果您先进行翻译,则:
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) )
关于c++ - 变换矩阵-旋转和变换后的新点坐标,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16760189/