2016-01-21 68 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

相關問題