5

我有以下内容:

bool AreNear(Point Old, Point Current)
{
    int x1 = Convert.ToInt32(Old.X);
    int x2 = Convert.ToInt32(Current.X);
    int y1 = Convert.ToInt32(Old.Y);
    int y2 = Convert.ToInt32(Current.Y);
    if (x1 == x2) {
        if (y1 == y2) {
            return true;
        }
    }
    return false;
}

如果当前点在旧点的 25 像素半径内,我想在函数中返回 true。谁能告诉我该怎么做?

4

4 回答 4

15

您可以使用毕达哥拉斯公式计算两点之间的距离。在 C# 中:

var d = Math.Sqrt(Math.Pow(x1 - x2, 2) + Math.Pow(y1 - y2, 2)) 

为什么这行得通?看一下下图,记住它a^2 + b^2 = c^2适用于直角三角形:

毕达哥拉斯

于 2012-10-23T14:10:36.837 回答
5

只需使用毕达哥拉斯定理计算距离的平方,然后与半径的平方进行比较:

bool ComparePoints(Point Old, Point Current)
{
    int x1 = Convert.ToInt32(Old.X);
    int x2 = Convert.ToInt32(Current.X);
    int y1 = Convert.ToInt32(Old.Y);
    int y2 = Convert.ToInt32(Current.Y);
    int dx = x1 - x2;
    int dy = y1 - y2;
    return (dx*dx + dy*dy) < 25*25;
}
于 2012-10-23T14:10:34.057 回答
3

您可以使用Math.Abs获取距离:

public static bool InDistance(Point Old, Point Current, int distance)
{
    int diffX = Math.Abs(Old.X - Current.X);
    int diffY = Math.Abs(Old.Y - Current.Y);
    return diffX <= distance && diffY <= distance;
}

用它:

bool arePointsInDistance = InDistance(new Point(100, 120), new Point(120, 99), 25);
于 2012-10-23T14:12:01.257 回答
0

尝试使用距离公式http://www.purplemath.com/modules/distform.htm并比较距离 <=25

于 2012-10-23T14:14:12.357 回答