我有一个正常的,默认的x,y坐标系。让我们称其为Frame1。然后,我使用以下行创建一个新框架:
glTranslatef(40, 125, 0);
glRotatef(theta, 0.0, 0.0, 1.0); //theta is in degrees here
glTranslatef(-40, -125, 0);让我们称其为Frame2。
我在(x,y)中有一个观点,Frame2。现在,我如何知道与Frame1有关的同一点的坐标?意思是,这个点保持不变,但是它相对于Frame1的坐标是什么?我试过:
alpha = atan2(Y,X);
hypo = Y/sin(alpha);
alphatheta = alpha + theta; //theta is in radians here and so is alpha
newY = hypo * sin(alphatheta);
newX = hypo * cos(alphatheta);但这不管用。我想在翻译方面有一些不同,因为旋转是围绕(40,125)而不是原点进行的。
那么,我如何找到newX和newY呢?也就是说,如果我在newX,newY中绘制( Frame1 ),我应该从Frame2得到与(X,Y)相同的点。
或者,我甚至可以这样问,如果某个物体围绕某个点(a,b)旋转,以θ角旋转,那么同一物体会旋转多少,围绕原点旋转?
发布于 2016-01-22 06:35:48
要做到这一点,一个简单的方法是为每个转换生成矩阵并将它们与Frame2中的点相乘。假设(x, y, z, w)在Frame2中有,(X, Y, Z, W)在Frame1中是等价的,您可以执行以下转换以到达Frame2:
Frame1 -> Transform1 -> Transform2 -> Transform3 -> Frame2
(X, Y, Z, W) = Matrix(T1) x Matrix(T2) x Matrix(T3) x (x, y, z, w)在您的示例中,它将是:
(newX, newY) = T(40, 125, 0) x R(theta, 0, 0, 1) x T(-40, -125, 0) x (x, y)现在,T和R表示为行主要矩阵:
T(a, b, c) = { {0,0,0,a}, {0,0,0,b}, {0,0,0,c}, {0,0,0,1} }
R(a, 0, 0, 1) = { {cos(a),-sin(a),0,0}, {sin(a),cos(a),0,0}, {0,0,1,0}, {0,0,0,1} }https://stackoverflow.com/questions/34936517
复制相似问题