2017-01-11 32 views
1

我在做一個小遊戲,現在我正在研究一個「雷達」。現在要做到這一點,我需要根據一個點圍繞中心點旋轉多少來找到兩個點。根據一個點在一箇中心點上旋轉多少來尋找2分

image

A是要繞C

由於ACB & D將隨A移動,並停留在基於斷的地方A是相同的「位置」。

因此,舉例來說,如果A各地C旋轉90度B & D會再移動,並在這個位置

image

但我不是在TRIG非常好,所以我真的不知道我需要的數學才能找到B & D根據多少A已經旋轉了大約C

如何找到B & D基於關閉的多少A各地C已經轉動?

我會像最終的數學看起來有點類似於此:

float * returnB(float * APoint, float * CPoint) 
{ 
    float B_Out[2]; 
    //calculate where B is based off A & C 
    B_Out[0] = B_X; 
    B_Out[1] = B_Y; 
    return B_Out; 
} 

float B[2]; 
B[0] = returnB(A,C)[0]; 
B[1] = returnB(A,C)[1]; 

float * returnD(float * APoint, float * CPoint) 
{ 
    float D_Out[2]; 
    //calculate where D is based off A & C 
    D_Out[0] = D_X; 
    D_Out[1] = D_Y; 
    return D_Out; 
} 

float D[2]; 
D[0] = returnD(A,C)[0]; 
D[1] = returnD(A,C)[1]; 
+0

http://stackoverflow.com/questions/2259476/rotating-a-point-about-another-point-2d – SingerOfTheFall

+0

你知道A圍繞C旋轉的角度嗎? – acraig5075

回答

1

所以,你知道A的相對位置的2D對於C.可以說,這是(AX,AY)。

如果叉積(0,0,1)與(AX,AY,0)你會發現d的相對位置,這將是類似的信息(DX,DY,0)

d =(DX ,DY)是D. b的相對位置也通過執行簡單的矩陣乘法,這給出了變換點(x0, y0)以下等式-d

https://en.wikipedia.org/wiki/Cross_product

4

可以旋轉的一個點(x, y)圍繞原點:

x0 = x * cos(theta) - y * sin(theta); 
y0 = x * sin(theta) + y * cos(theta);