检查光标是否在特定半径内

本文关键字:光标 是否 检查 | 更新日期: 2023-09-27 18:32:06

实际上,我正在尝试做一个程序来判断你是否在我的秘密半径内。 例如,我将一个点设置为x = 1000和y = 400,我将半径设置为例如50,如果我的光标距离该点的半径为50,它将写入控制台"您在半径内,x为1000,y为400"。

这不是家庭作业或类似的东西,我只是在尝试新的东西。

好的,这就是我尝试过的,不能再继续了。

-注意:半径应该是圆的,所以我想我需要实现 rPI,但我不确定如何以编程方式做到这一点:

class Program
{
    [DllImport("user32.dll", SetLastError = true)]
    public static extern bool GetCursorPos(out System.Drawing.Point point);
    [DllImport("user32.dll")]
    public static extern int GetAsyncKeyState(System.Windows.Forms.Keys vKey);
    static void Main(string[] args){
        Point cursorPoint;
        Point myPos = Point.Empty;
        myPos.X = 1000;
        myPos.Y = 400;
        int myRadius = 50;
        while (true){
            //if pressed ESC let me end the program.
            if (GetAsyncKeyState(Keys.Escape) > 0)
                return;
            //get cursor pos and store it in cursorPoint
            GetCursorPos(out cursorPoint);
            //here should be a check with some calculation about radius, but I can't do that..
            Console.WriteLine("You are in radius and your cursor coordinations are X:{0}|Y:{1}",cursorPoint.X,cursorPoint.Y);
            //help cpu
            Thread.Sleep(16);
        }
    }
}

感谢您的任何帮助。

检查光标是否在特定半径内

你只需要使用毕达哥拉斯来计算点之间的距离,并将其与范围进行比较。

通常您需要平方根来找到两点之间的距离,但是如果您只需要与范围进行比较,则可以改为对范围进行平方,而不必采用平方根。

例如:

static bool isInRange(Point p1, Point p2, int range)
{
    int rangeSquared = range * range;
    int deltaX = p2.X - p1.X;
    int deltaY = p2.Y - p1.Y;
    int distanceSquared = deltaX*deltaX + deltaY*deltaY;
    return distanceSquared <= rangeSquared;
}

另请注意,如果坐标变得太大,这些计算将溢出,但对于屏幕上的像素坐标,这不会发生。

据我了解,您的问题是关于确定直线上两点之间的距离,即围绕其中心的圆的半径。

为此,您首先需要 x 和 y 中的增量。之后你使用勾股定理(在这里找到)。

double deltaX = myPos.X - cursorPoint.X;
double deltaY = myPos.Y - cursorPoint.Y;
double distance = Math.Sqrt( Math.Pow( deltaX, 2 ) + Math.Pow( deltaY, 2));
// Continue with your calculations with distance and myRadius