2012-03-17 3 views
0

현재 마우스 움직임의 각도를 계산해야하는 openFrameworks에서 일종의 그리기 프로그램을 만드는 중입니다. 그 이유는 프로그램이 포토샵과 비슷한 방식으로 브러시 스트로크를 그릴 수 있어야하기 때문입니다.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가 계속 발생합니다.