移动鼠标沿对角线(Moving the mouse along a diagonal line)

2019-09-20 14:12发布

什么样的数学算法,我可以用它来计算出路径移动鼠标? 我只是想有这种类型的函数:

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直线算法 。 奇怪的是,虽然,该行不画一组角度。 他们似乎对屏幕的左上角引力。

Answer 1:

存储为浮点值的位置坐标,然后就可以表示的方向作为一个单位矢量,并通过特定的速度繁殖。

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

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


文章来源: Moving the mouse along a diagonal line