坐标不对,添加不正确

Incorrect coordinates, not adding correctly

我只是想将光标从 A 点移动到 B 点。事实证明这很好,直到我尝试使用 Y 值应该增加时开始减少的坐标。我很困惑,因为据我所知,我已经正确设置了 if 语句。

例如,我将开始的 X,Y 坐标设置为 0,0,结束坐标为 1920,1080。它在屏幕上沿对角线移动就好了。反之亦然,它从 1920,1080 移动到 0,0 就好了。当我设置了这些坐标时(在下面的示例中),那就是问题发生的时候,我意识到它不能正常工作。我将 SetCursorPos 更改为 std::cout 以调查问题,我的 Y 坐标正向负数移动。

我已经思考了几天,但似乎无法弄清楚。我确信这是一个我忽略的简单解决方案。

#include <chrono>
#include <iostream>
#include <thread>
#include <Windows.h>

template<typename T>
void move(T x, T y, const T& nx, const T& ny)
{
    T run = nx - x, rise = ny - y, addX = 0, addY = 0;
    if(run > rise)
    {
        addX = run / rise;
        addY++;
    }
    else
    {
        addX++;
        addY = rise / run;
    }

    while(x != nx && y != ny)
    {
        if(x < nx)
        {
            x += addX;
            if(x > nx)x = nx;
        }
        else if (x > nx)
        {
            x -= addX;
            if(x < nx)x = nx;
        }
        if(y < ny)
        {
            y += addY;
            if(y > ny)y = ny;
        }
        else if (y > ny)
        {
            y -= addY;
            if(y < ny)y = ny;
        }

        std::cout << "X: " << x << " Y: " << y << std::endl;
        std::this_thread::sleep_for(std::chrono::microseconds(1));
    }
}

int main()
{ 
    move<double>(790,310,595,650);
    while(true);
}

由于您要添加或减去 addX 和 addY,具体取决于它们是小于还是大于 nx 和 ny,因此它们必须始终为正值。因此,在计算 addX 和 addY 之前,只需计算 rise 和 运行 的绝对值即可:

T run = nx - x, rise = ny - y, addX = 0, addY = 0;
if(run < 0)
    run = -run;
if(rise < 0)
    rise = -rise;