计算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