我目前正在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;
}
我尝试过不同的方法来优化代码,以便顺利工作,但没有结果。
如果你对如何修复或优化这个问题持巧妙态度,我将非常感激。
答案 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步的点来增加角度的平滑度。如果鼠标像笔划一样移动,则此方法有效。如果鼠标移动缓慢,仍会出现锯齿状。