0

マウスを動かすパスを計算するには、どのような数学アルゴリズムを使用できますか? 私は単にこのタイプの機能を持ちたいだけです:

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

たとえば、animateMouseDiag(100,300) を指定すると、マウスは右に 100、下に 300 移動しますが、「L」で右から下に移動するのではなく、斜めに移動します。同様に、(-50,-200) を指定すると、対角線に沿って相対座標 (左に 50、上に 200) に移動します。

ありがとうございました!(ちなみに、これは代替アカウントです。なぜなら、私はメインで高校の数学の基礎について尋ねるのが馬鹿のように感じているからです。それをプログラミングに翻訳することはできません。)

編集:私はこれを思いついた:

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 の直線アルゴリズムです。奇妙なことに、線は一定の角度で描かれていません。画面の左上に向かって引き寄せられているようです。

4

1 に答える 1

1

位置座標を浮動小数点値として保存すると、方向を単位ベクトルとして表し、特定の速度を掛けることができます。

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

mouseX += (directionX / mag) * speed;
mouseY += (directionY / mag) * speed;
于 2012-08-01T01:28:17.077 に答える