2012-01-06 9 views
4

マウスを現在の位置から所定の位置に移動する小さなプログラムを作成しようとしています。マウスをあるポイントから別のポイントに直線移動するアルゴリズム

moveMouse(int x, int y); 

これはアニメーションせずに画面上のx、yに現在の座標からマウスを移動する:ここで私は一点から別のではなく、アニメーションせずにマウスを移動している使用することができる方法です。今私の仕事は、その座標にマウスを移動することですが、マウスが一度に1ピクセルずつ動くように表示する必要があります。ようにマウス

public void moveMouseAnimation(x,y){ 
     //Integers x2 and y2 will be the current position of the mouse cursor 
     boolean isRunning = true; 
     while(isRunning){ 
      delay(10); // <- 10 Milliseconds pause so that people can see the animation 
      x2 -= 1; 
      y2 -= 1; 
      moveMouse(x2,y2); 
      if(x2 == x && y2 == y) isRunning = false; //Ends loop 
     } 
} 

は、今私は正しいX2とY2の値を見つける必要があります。ここでは、私が考えていたものであるように、私は一度にマウスカーソル数ピクセルのxとyを動かすのループを作成する必要があります直線的に移動し、最後にxとyに達する。誰かが私を助けることができますか?

+0

距離、部門、および示されたフレームの所望の数を持っていない探している場合SOLNの詳細refはhttp://en.wikipedia.org/wiki/Bresenham's_line_algorithmを試すために、あなたの友人です。 x軸に沿って1回、y軸に沿って1回。 (浮動小数点数をintに変換する際に可能な丸め誤差を考慮に入れてください) – stakx

+0

@TheNail:いいえ、Javaのスキルを習得する単純なプログラムを作成しようとしていますが、アルゴリズムを考えることができませんでした stakx:とにかくおかげで、うまく動作しませんでした – KSubedi

答えて

5

これを行うコードは以下のとおりです。このコードでは、Bresenham Line Algoを使用しています。あなたがギザギザの線

boolean steep = Math.abs(y1 - y0) > Math.abs(x1 - x0); 
    if (steep) { 
     int t; 
     // swap(x0, y0); 
     t = x0; 
     x0 = y0; 
     y0 = t; 
     // swap(x1, y1); 
     t = x1; 
     x1 = y1; 
     y1 = t; 
    } 
    if (x0 > x1) { 
     int t; 
     // swap(x0, x1); 
     t = x0; 
     x0 = x1; 
     x1 = t; 

     // swap(y0, y1); 
     t = y0; 
     y0 = y1; 
     y1 = t; 
    } 
    int deltax = x1 - x0; 
    int deltay = Math.abs(y1 - y0); 
    int error = deltax/2; 
    int ystep; 
    int y = y0; 
    if (y0 < y1) 
     ystep = 1; 
    else 
     ystep = -1; 

    for (int x = x0; x < x1; x++) { 
     if (steep) 
      moveMouse(y, x); 
     else 
      moveMouse(x, y); 
     error = error - deltay; 
     if (error < 0) { 
      y = y + ystep; 
      error = error + deltax; 
     } 
    } 
+0

ありがとう、このbresenhamのラインアルゴリズムについて知っていた – KSubedi

3

解決しようとしている問題は、線形補間の問題です。開始点(x0、y0)と終了点(x1、y1)の間の直線の線形補間です。

幸いにも解決は簡単です。 Wikipediaの記事は、あなたがしようとしていることをほぼ正確に示しています。

http://en.wikipedia.org/wiki/Linear_interpolation

9

あなたはBresenham's line algorithmをしたいです。これは一般に2つの点の間に線を描くために使用されますが、線を描くのではなく、マウスをその線に沿って移動させます。

Illustration of Bresenham's line algorithm

+0

多くのおかげで、このアルゴリズムについて知りませんでした – KSubedi

2

あなたは基本的に所定のポイントにY = MX + Bを嵌合....直線を補間することができました。

関連する問題