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)。

谢谢!(顺便说一句,这是一个 alt 帐户,因为我觉得自己像个白痴一样在我的主目录上询问基本的高中数学。我只是无法将其翻译成编程。)

编辑:我想出了这个:

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 回答