2つのポイント(x1、y1)と(x2、y2)があります。ポイントが5メートル以内にあるかどうか知りたいです。
8 に答える
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.Subtract
はSystem.Windows.Vectorであり、距離を比較する必要がある場合にLengthSquared
1つの計算を保存するプロパティもあります。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.Point
でWindowsBase
のみ利用可能です.Net Framework
。.NET
、、.NET standard
の一部ではありません.NET core
。
System.Drawing.Point
使用可能なメソッドやSystem.Drawing.PointF
演算子はなく、単なるコンテナです。
インタレストはSystem.Numerics.Vector2
、おそらくの代わりに最適ですSystem.Windows.Point
。同様のAPIがあり、すべての.NET
欠陥で利用できます。しかし、セマンティクスは奇妙です-ポイント表現にベクトルを使用します。
ある点から別の点までの二乗距離を測定します。
((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を呼び出さないことに注意してください。あなたの場合、そのような最適化は時期尚早かもしれませんが、そのコードを何度も実行する必要がある場合に役立ちます。
もちろん、あなたはメートルで話しているので、点の座標もメートルで表されていると思います。
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
}
ポイント(X1、Y1)と(X2、Y2)が与えられると、次のようになります。
dX = X1 - X2;
dY = Y1 - Y2;
if (dX*dX + dY*dY > (5*5))
{
//your code
}
これが私の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桁に丸められた平方根です。
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;
次の式を使用して、2点間の距離を見つけることができます。
distance*distance = ((x2 − x1)*(x2 - x1)) + ((y2 − y1)*(y2 - y1))
アルゴリズム:((x1-x2)^ 2 +(y1-y2)^ 2)<25