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

ピタゴラスの公式を使用して、2 点間の距離を計算できます。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

ピタゴラスの定理を使用して距離の 2 乗を計算し、半径の 2 乗と比較します。

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 に答える