openFrameworks中的鼠标移动角度

时间:2012-03-17 12:29:16

标签: mouse angle openframeworks

我目前正在openFrameworks中创建一种需要计算鼠标移动角度的绘图程序。这样做的原因是程序需要能够绘制类似于photoshop的方式绘制笔触。

我已经能够以非常锯齿的方式工作了。我已将我的代码放在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;
}

我尝试过不同的方法来优化代码,以便顺利工作,但没有结果。

如果你对如何修复或优化这个问题持巧妙态度,我将非常感激。

1 个答案:

答案 0 :(得分: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步的点来增加角度的平滑度。如果鼠标像笔划一样移动,则此方法有效。如果鼠标移动缓慢,仍会出现锯齿状。