我可以使用什么样的数学算法来计算移动鼠标的路径?我只想拥有这种类型的功能:
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's line algorithm。奇怪的是,线条不会在设定角度上绘制。他们似乎正在向屏幕的左上方倾斜。
答案 0 :(得分:1)
将位置坐标存储为浮点值,然后您可以将方向表示为单位矢量并乘以特定速度。
double mag = Math.Sqrt(directionX * directionX + directionY * directionY);
mouseX += (directionX / mag) * speed;
mouseY += (directionY / mag) * speed;