2013-05-26 67 views
0

儘管互聯網上有很多關於它的教程,但我找不到合適的解決方案!我畫了一條線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

我想獲得我行的終點(如果起始點爲的中間窗口)

回答

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

謝謝您的回答,但它是還是行不通。我在我的問題上添加了一小段示例代碼,以防我沒有正確詢問問題! – drn

+0

我不清楚你到底在改變什麼。如果您正在改變細分受衆羣而不僅僅是終點節點,那麼您就可以完成這兩點,這些點都是我在回答中編輯的。 – lurker

+0

我很抱歉打擾你,但仍然有問題。例如,如果我的p1在(0,0),然後我將它翻譯爲(150,150),然後旋轉它1.7radians - 答案應該給我點(150,150)。然而,當我應用'x:(150 * cos(1.7)) - (150 * sin(1.7))'的公式時,結果是'-173.768'!對於y:'(150 * sin(1.7))+(150 * cos(1.7))= 129.42' – drn