2016-01-21 71 views
0

我有一个正常的默认x,y坐标系。让我们打电话给这个Frame1。 我然后使用以下行来创建一个新的框架:在OpenGL中查找另一帧中一帧的点坐标

glTranslatef(40, 125, 0); 
glRotatef(theta, 0.0, 0.0, 1.0); //theta is in degrees here 
glTranslatef(-40, -125, 0); 

让我们把这个式2

我在Frame2中有一个点(x,y)。 现在,我如何知道相对于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?如果我在Frame1中绘制(newX,newY),我应该从Frame2得到与(X,Y)相同的点。

或者,我甚至可以用这种方式提问, 如果围绕某个点(a,b)旋转角度theta,相同的东西将围绕原点旋转多少?

回答

0

一个简单的方法是通过为每个转换生成矩阵并将它们与Frame2中的点相乘。 比方说,你有式2 (x, y, z, w)(X, Y, Z, W)是等值的帧1,你做以下变换来达到式2:

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) 

TR表示为行主要基质:

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} } 
+0

感谢秩序的重要性answer..The乘法不能太强调.. – rasalghul

相关问题