2012-03-17 45 views
0

我目前正在openFrameworks中創建一種繪圖程序,需要計算鼠標移動的角度。其原因是該程序需要能夠畫出類似於Photoshop那樣的畫筆筆觸。openFrameworks中的鼠標移動角度

我已經能夠讓它工作在一個非常鋸齒的方式。我已將代碼放入openFrameworks中的MouseDragged事件中,但計算得出的角度非常不穩定,並且不順暢。爲了使繪圖部分看起來很好,它需要平滑。

void testApp::mouseMoved(int x, int y){ 
    dxX = x - oldX; 
    dxY = y - oldY; 

    movementAngle = (atan2(dxY, dxX) * 180.0/PI); 
    double movementAngleRad; 
    movementAngleRad = movementAngle * TO_RADIANS; 
    if (movementAngle < 0) { 
     movementAngle += 360; 
    } 

    testString = "X: " + ofToString(dxX) + " ,"; 
    testString += "Y: " + ofToString(dxY) + " ,"; 
    testString += "movementAngle: " + ofToString(movementAngle); 

    oldX = x; 
    oldY = y; 
} 

我試過不同的方法來優化代碼工作順利,但唉,沒有結果。

如果您對如何修復或優化這個問題有着非常好的想法,我將非常感激。

回答

0

我通過使用ofPolyline對象在一定程度上解決了它。

以下代碼顯示了它的工作原理。

void testApp::mouseMoved(int x, int y){ 
    float angleRad; 
    if (movement.size() > 4) 
    { angleRad = atan2(movement[movement.size()-4].y - y, movement[movement.size()-4].x -x);} 
    movementAngle = (angleRad * 180/PI) + 180; 
    movement.addVertex(x,y,0); 
} 

正如我在代碼中看到的,我使用記錄了4個步驟的點來增加角度的平滑度。如果鼠標像移動一樣在筆畫中移動,這將起作用。如果鼠標移動緩慢,jaggyness仍然會發生。