计算2点之间的距离

我有两个点(x1,y1)和(x2,y2)。 我想知道这些点是否在5米之内。

测量从一个点到另一个点的平方距离:

((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,第二个可能更慢,也不会调用Math.Sqrt ,总是出于性能原因。 也许这种优化在你的情况下还为时过早,但如果代码必须执行很多次,它们就很有用。

当然你用米说话,我认为点坐标也用米表示。

如果您使用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来保存一个sqrt计算。
  • 在项目中可能需要添加对WindowsBase程序集的引用
  • 您也可以使用运算符

使用LengthSquared和运算符的示例

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

c#中的这样的东西可能会完成这项工作。 只需确保您传递的是一致的单位(如果一个点以米为单位,请确保第二个点也以米为单位)

 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); 

x1,y1是第一个坐标,x2,y2是第二个坐标。 最后一行是平方根,四舍五入到小数点后3位。

算法:((x1-x2)^ 2 +(y1-y2)^ 2)<25