0

我目前正在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;
}

我尝试了不同的方法来优化代码以使其顺利运行,但可惜没有结果。

如果您对如何解决或优化此问题有一个绝妙的想法,我将不胜感激。

4

1 回答 1

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 步来增加角度的平滑度。如果鼠标以类似笔划的方式移动,则此方法有效。如果鼠标移动缓慢,仍然会出现锯齿。

于 2012-03-18T10:02:04.357 回答