检查光标是否在特定半径内
本文关键字:光标 是否 检查 | 更新日期: 2023-09-27 18:32:06
实际上,我正在尝试做一个程序来判断你是否在我的秘密半径内。 例如,我将一个点设置为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;
}
另请注意,如果坐标变得太大,这些计算将溢出,但对于屏幕上的像素坐标,这不会发生。
据我了解,您的问题是关于确定直线上两点之间的距离,即围绕其中心的圆的半径。
为此,您首先需要 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