2011-05-23 169 views
1

我正在製作一個骨架動畫編輯器。現在,每個骨骼都有一個起點和終點,當鼠標位於一個點之下時,隨後的拖動將導致骨骼根據鼠標的位置旋轉。爲此,我調用atan2並將鼠標座標轉換爲當地鼠標被按下的地方空間。雖然這個「有效」,但它確實是錯誤的。由骨形成的矢量不一定與鼠標點平行,它應該是。當用鼠標拖動時使用atan2來旋轉圖像

我覺得有什麼關於atan2我不明白。

if(boneUnderMouse) 
    { 
     boneUnderMouse->setAngle(startAngle + 
     (atan2((float)event.mouse.x - startX,event.mouse.y - startY))); 
    } 

感謝

回答

5

atan2有爭論yx秩序。因此您需要

atan2((float)event.mouse.y - startY, (float)event.mouse.x - startX) 
+0

還有更多的東西,當起始角度大於或等於π時,它會沿相反的方向旋轉。 – jmasterx 2011-05-23 18:31:56

+0

@Milo:這給出了終點和起點之間的角度。因此,如果您將此添加到'startAngle',您會看到這樣的效果。嘗試直接設置角度(即沒有'startAngle +'部分)。 – Howard 2011-05-23 18:34:59

+0

問題是我設置的角度是相對於其父項。這就是爲什麼我只想添加角度變化 – jmasterx 2011-05-23 18:38:18