2012-01-09 37 views
4

我正在用2D編程遊戲。我所取得的成果是以自定義路徑爲基礎移動精靈。 該路徑可以用數學表示爲:y = sin(x)。因此,運動是一個波。 我想以這種方式旋轉這個波,所以這個運動不是水平的,而是垂直的,或者是一些自定義的角度。 我有點虛弱,數學。抱歉。任何人都可以幫忙 我的代碼是這樣的如何旋轉軸上的正弦曲線

for (int i=0; i<300; i++) { 
    coordinatesX[i] = i; 
    coordinatesY[i] = (float) (50 * Math.sin(coordinatesX[i])); 
} 

createpath (coordinatesX, coordinatesY); 
... 
+0

逆時針旋轉90度,它只是交換X和Y值 – yas4891 2012-01-09 18:24:24

回答

4

那麼,你的目標是代表了一些起點座標(X,Y)^ T。爲了旋轉,在二維空間中,你可以使用旋轉矩陣

R = [ cos(a) -sin(a)] 
    [ sin(a) cos(a) ] 

既然你也想進行平移T(沿正弦波移動),您可以通過擴展你的2D彌補的仿射變換座標到3D均勻座標。假設你的翻譯會(TX,TY),你的旋轉角度(弧度)是,變換矩陣將

T = [ cos(a) -sin(a) tx 
     sin(a) cos(a) ty 
     0  0  1 ] 

當你改變你原有的(X,Y)指向(X,Y ,1)一個簡單的

T * (x,y,1)^t 

將做的伎倆。

通過將所有元素除以最後一個元素(即鬆開一個維度),您可以從同質到笛卡爾座標返回。因爲在這種簡單的情況下,它們總是1,您可以簡單地放下最後一個座標並回到2D中。

編輯: Mulitplying T和(X,Y,1)^噸產率:

T*(x,y,1)^t = [ cos(a) -sin(a) tx ] [ x ] 
       [ sin(a) cos(a) ty ]*[ y ] = 
       [ 0  0  1 ] [ 1 ] 

      = [ cos(a)*x - sin(a)*y + tx ] 
       [ sin(a)*x + cos(a)*y + ty ] = 
       [   1    ] 

      = (cos(a)*x - sin(a)*y + tx, sin(a)*x + cos(a)*y + ty, 1)^t 
+0

「罪的(a)COS(一)'是指sin(a)乘以cos(a)? – 2012-01-10 08:36:37

+0

不,T是三行三列的矩陣。看看這裏:http://en.wikipedia.org/wiki/Matrix_multiplication – 2012-01-10 08:57:55

+0

我編輯我的答案,包括數學(注意^噸意思是「轉置」) – 2012-01-10 09:07:47