计算2点之间的距离

时间:2012-07-19 06:49:55

标签: c#

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

8 个答案:

答案 0 :(得分:30)

如果您使用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;

答案 1 :(得分:28)

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

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

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

答案 2 :(得分:6)

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
}

答案 3 :(得分:5)

给定点(X1,Y1)和(X2,Y2),然后:

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

if (dX*dX + dY*dY > (5*5))
{
    //your code
}

答案 4 :(得分:4)

这是我的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位。

答案 5 :(得分:0)

如果你使用 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);

如果你使用 System.Windows.Point 之类的 wpf ;

Point.Subtract(_p1, _p2).Length;

答案 6 :(得分:-1)

您可以使用以下公式找到两点之间的距离:

distance*distance = ((x2 − x1)*(x2 - x1)) + ((y2 − y1)*(y2 - y1))

答案 7 :(得分:-3)

算法: ((x1-x2)^ 2 +(y1-y2)^ 2)&lt; 25