17

2つのポイント(x1、y1)と(x2、y2)があります。ポイントが5メートル以内にあるかどうか知りたいです。

4

8 に答える 8

53

System.Windows.Pointポイントを表すためにデータ型を使用している場合は、次を使用できます。

// assuming p1 and p2 data types
Point p1, p2;
// distanc can be calculated as follows
double distance = Point.Subtract(p2, p1).Length;

更新2017-01-08:

  • Microsoftドキュメントへの参照を追加する
  • 結果Point.SubtractSystem.Windows.Vectorであり、距離を比較する必要がある場合にLengthSquared1つの計算を保存するプロパティもあります。sqrt
  • プロジェクトでアセンブリへの参照を追加するWindowsBase必要がある場合があります
  • 演算子を使用することもできます

LengthSquaredおよび演算子を使用した例

// assuming p1 and p2 data types
Point p1, p2;
// distanc can be calculated as follows
double distanceSquared = (p2 - p1).LengthSquared;

更新2021-11-15:

残念ながら、System.Windows.PointWindowsBaseのみ利用可能です.Net Framework.NET、、.NET standardの一部ではありません.NET core

System.Drawing.Point使用可能なメソッドやSystem.Drawing.PointF演算子はなく、単なるコンテナです。

インタレストはSystem.Numerics.Vector2、おそらくの代わりに最適ですSystem.Windows.Point。同様のAPIがあり、すべての.NET欠陥で利用できます。しかし、セマンティクスは奇妙です-ポイント表現にベクトルを使用します。

于 2016-06-28T21:22:29.610 に答える
38

ある点から別の点までの二乗距離を測定します。

((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)) < d*d

ここで、dは距離、(x1、y1)は「基点」の座標、(x2、y2)はチェックする点の座標です。

または必要に応じて:

(Math.Pow(x1-x2,2)+Math.Pow(y1-y2,2)) < (d*d);

優先されるものは速度の理由でPowをまったく呼び出さず、2番目の方法はおそらく低速でありMath.Sqrt、常にパフォーマンスの理由でPowを呼び出さないことに注意してください。あなたの場合、そのような最適化は時期尚早かもしれませんが、そのコードを何度も実行する必要がある場合に役立ちます。

もちろん、あなたはメートルで話しているので、点の座標もメートルで表されていると思います。

于 2012-07-19T06:57:03.180 に答える
22

C#のこのようなものはおそらく仕事をするでしょう。一貫した単位を通過していることを確認してください(1つのポイントがメートル単位の場合は、2番目のポイントもメートル単位であることを確認してください)

private static double GetDistance(double x1, double y1, double x2, double y2)
{
   return Math.Sqrt(Math.Pow((x2 - x1), 2) + Math.Pow((y2 - y1), 2));
}

そのように呼ばれる:

double distance = GetDistance(x1, y1, x2, y2)
if(distance <= 5)
{
   //Do stuff
}
于 2016-10-03T20:46:43.580 に答える
5

ポイント(X1、Y1)と(X2、Y2)が与えられると、次のようになります。

dX = X1 - X2;
dY = Y1 - Y2;

if (dX*dX + dY*dY > (5*5))
{
    //your code
}
于 2012-07-19T06:51:52.407 に答える
4

これが私の2セントです:

double dX = x1 - x2;
double dY = y1 - y2;
double multi = dX * dX + dY * dY;
double rad = Math.Round(Math.Sqrt(multi), 3, MidpointRounding.AwayFromZero);

x1、y1は最初の座標で、x2、y2は2番目の座標です。最後の行は、小数点以下3桁に丸められた平方根です。

于 2015-11-10T03:52:19.823 に答える
1

System.Drawing.Pointを使用する場合;

Point p1 = new Point();
Point p2 = new Point();

Math.Pow(Math.Pow(p1.X - p2.X, 2) + Math.Pow(p1.Y - p2.Y, 2), 1 / 2);

wpfのようにSystem.Windows.Pointを使用する場合;

Point.Subtract(_p1, _p2).Length;

于 2021-03-05T13:19:30.590 に答える
-1

次の式を使用して、2点間の距離を見つけることができます。

distance*distance = ((x2 − x1)*(x2 - x1)) + ((y2 − y1)*(y2 - y1))
于 2019-12-12T06:37:58.687 に答える
-3

アルゴリズム:((x1-x2)^ 2 +(y1-y2)^ 2)<25

于 2012-07-19T07:00:35.037 に答える