计算2点之间的距离

use*_*376 11 c#

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

j12*_*567 33

如果您使用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;
Run Code Online (Sandbox Code Playgroud)

更新2017-01-08:

  • 添加对Microsoft文档的引用
  • 结果Point.SubtractSystem.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;
Run Code Online (Sandbox Code Playgroud)

  • @Sahuagin有[System.Windows.Point](https://msdn.microsoft.com/en-us/library/system.windows.point(v = vs.110).aspx)!您只需要在项目中引用WindowsBase assambly. (5认同)
  • 没有`System.Windows.Point`类型,它是`System.Drawing.Point`."Subtract"也没有重载需要两个点,第二个参数必须是"大小". (2认同)

Fel*_*ano 30

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

((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)) < d*d
Run Code Online (Sandbox Code Playgroud)

其中d是距离,(x1,y1)是"基点"的坐标,(x2,y2)是要检查的点的坐标.

或者如果您愿意:

(Math.Pow(x1-x2,2)+Math.Pow(y1-y2,2)) < (d*d);
Run Code Online (Sandbox Code Playgroud)

注意到首选的不是出于速度原因而根本没有调用Pow,第二个可能是较慢的,也不会调用Math.Sqrt,总是出于性能原因.也许这种优化在你的情况下还为时过早,但如果代码必须执行很多次,它们就很有用.

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

  • 你可以编辑实际的距离代码,因为这个帖子是通过"点之间的距离"找到的吗?就像`var distance = Math.Sqrt((Math.Pow(x1-x2,2)+ Math.Pow(y1-y2,2)))`带注释"但通常用于距离检查你只需要比较距离的平方". (8认同)

Jac*_*eld 9

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));
}
Run Code Online (Sandbox Code Playgroud)

这样称呼:

double distance = GetDistance(x1, y1, x2, y2)
if(distance <= 5)
{
   //Do stuff
}
Run Code Online (Sandbox Code Playgroud)


Roe*_*rel 5

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

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

if (dX*dX + dY*dY > (5*5))
{
    //your code
}
Run Code Online (Sandbox Code Playgroud)