2012-08-01 4 views
0

마우스를 움직일 경로를 계산하는 데 사용할 수있는 수학 알고리즘은 무엇입니까? 단순히 기능의이 유형 갖고 싶어 : 나는 그것을 animateMouseDiag (100300)를 제공하는 경우 예를 들어대각선을 따라 마우스 이동

animateMouseDiag(int X, int Y){ 
    //Move mouse 1 step towards goal, for loop most likely, from the current Mouse.Position 
    Thread.Sleep(1); 
} 

를, 그것은 오른쪽 마우스 (100)를 아래로 움직 300 만 대각선하지 못했습니다-해당 시점 것 'L'자. 비슷하게, 내가 그것을 주면 (-50, -200) 대각선 경로를 따라 상대 좌표 (왼쪽 50 및 왼쪽 200)로 이동합니다.

감사합니다. (덧붙여서, 이것은 내 기본에 대한 고등학교 수학에 대해 묻는 바보 같아서 프로그래밍으로 변환 할 수 없다.)

EDIT : 나는 이것을 내놓았다 :

public static void animateCursorTo(int toX, int toY) 
     { 
      double x0 = Cursor.Position.X; 
      double y0 = Cursor.Position.Y; 

      double dx = Math.Abs(toX-x0); 
      double dy = Math.Abs(toY-y0); 

      double sx, sy, err, e2; 

      if (x0 < toX) sx = 1; 
      else sx = -1; 
      if (y0 < toY) sy = 1; 
      else sy = -1; 
      err = dx-dy; 

      for(int i=0; i < toX; i++){ 
       //setPixel(x0,y0) 
       e2 = 2*err; 
       if (e2 > -dy) { 
        err = err - dy; 
        x0 = x0 + sx; 
       } 
       if (e2 < dx) { 
        err = err + dx; 
        y0 = y0 + sy; 
       } 
       Cursor.Position = new Point(Convert.ToInt32(x0),Convert.ToInt32(y0)); 
      } 
     } 

Bresenham's line algorithm입니다. 이상하게도, 선은 설정된 각도로 그려지지 않습니다. 그들은 화면의 왼쪽 상단을 향해 중력을 가하는 것 같습니다.

답변

1

부동 소수점 값으로 위치 좌표를 저장하면 방향을 단위 벡터로 나타내고 특정 속도로 곱할 수 있습니다.

double mag = Math.Sqrt(directionX * directionX + directionY * directionY); 

mouseX += (directionX/mag) * speed; 
mouseY += (directionY/mag) * speed; 
+0

Heh. 그 하나에 빈 그리기 ... 편집 : 봐요! – user1567298