Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 检查光标是否在某个半径内_C#_Geometry - Fatal编程技术网

C# 检查光标是否在某个半径内

C# 检查光标是否在某个半径内,c#,geometry,C#,Geometry,事实上,我正在做一个程序,告诉你是否在我的秘密半径。 我将一个点设置为例如x=1000和y=400,并将半径设置为例如50,如果我的光标在距离该点50的半径范围内,它将在控制台中写入“你在半径范围内,x是1000,y是400” 这不是家庭作业或类似的东西,我只是在尝试新的东西。 好的,这就是我尝试过的,我不能再继续了 -注意:半径应该是圆,所以我想我需要实现r和PI,但我不确定如何通过编程实现: class Program { [DllImport("user32.dll", SetLa

事实上,我正在做一个程序,告诉你是否在我的秘密半径。 我将一个点设置为例如x=1000和y=400,并将半径设置为例如50,如果我的光标在距离该点50的半径范围内,它将在控制台中写入“你在半径范围内,x是1000,y是400”

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

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

-注意:半径应该是圆,所以我想我需要实现r和PI,但我不确定如何通过编程实现:

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;
}
静态布尔isInRange(点p1、点p2、整数范围)
{
int rangeSquared=范围*范围;
int deltaX=p2.X-p1.X;
int deltaY=p2.Y-p1.Y;
int distance squared=deltaX*deltaX+deltaY*deltaY;

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

通常你需要平方根来计算两点之间的距离,但是如果你只需要比较一个范围,你可以取而代之的是平方这个范围,避免需要平方根

例如:

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;
}
静态布尔isInRange(点p1、点p2、整数范围)
{
int rangeSquared=范围*范围;
int deltaX=p2.X-p1.X;
int deltaY=p2.Y-p1.Y;
int distance squared=deltaX*deltaX+deltaY*deltaY;

return distance squared据我所知,这是关于确定直线上两点之间的距离,即围绕圆心的圆的半径

为此,首先需要x和y的delta,然后使用毕达哥拉斯定理(待找到)


据我所知,你的问题是关于确定直线上两点之间的距离,即围绕圆心的圆的半径

为此,首先需要x和y的delta,然后使用毕达哥拉斯定理(待找到)


这是一道数学题。距离=sqrt[(x2−x1)^2+(y2−y1)^2]这是winforms还是wpf项目?以winforms作为reference@Szer这可能是一个数学问题,但我仍然不知道如何检查光标是否在公式的半径内,这是最大的问题here@dadasdasdas我刚刚给了你们一个计算点和点之间距离的公式:)只需将它与50或其他数值进行比较你需要的距离和你要走的距离。这是一个数学问题。距离=sqrt[(x2−x1)^2+(y2−y1)^2]这是winforms还是wpf项目?以winforms作为reference@Szer这可能是一个数学问题,但我仍然不知道如何检查光标是否在公式的半径内,这是最大的问题here@dadasdasdas我刚刚给了你们一个计算点和点之间距离的公式:)只需将它与50或其他数值进行比较你需要的距离,你可以走了。谢谢,我会完全尝试一下。哦,还有,它应该是
int deltaY=p2.Y-p1.Y
?@dadasdasdas是的,应该是的,谢谢dmitry纠正了错误。谢谢,我会完全尝试一下。哦,还有,它应该是
int deltaY=p2.Y-p1.Y
?@dadadasdasdas是的,它是的乌尔德,谢谢德米特里纠正了打字错误。