Угол перемещения мыши в openFrameworks - PullRequest
0 голосов
/ 17 марта 2012

Я сейчас нахожусь в процессе создания своего рода программы для рисования в openFrameworks, которая должна рассчитать угол перемещения мыши.Причина этого в том, что программе нужно уметь рисовать мазки кистью подобно тому, как это делает Photoshop.

Мне удалось заставить ее работать очень неровно.Я разместил свой код в событии MouseDragged в openFrameworks, но вычисленный угол очень неровный и в любом случае не сглаженный.Это должно быть гладким, чтобы часть рисунка выглядела хорошо.

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 голосов
/ 18 марта 2012

Я до некоторой степени решил это с помощью объекта 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 шага назад, чтобы увеличить плавность угла.Это работает, если мышь перемещается в движении, как движения.Если мышь двигается медленно, неровность все равно будет иметь место.

...