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