我有两个点 (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
保存一次计算的属性。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 ,而第二个可能更慢,也不会调用Math.Sqrt
,总是出于性能原因。在您的情况下,这种优化可能为时过早,但如果必须多次执行该代码,它们会很有用。
当然你说的是米,我想点坐标也用米表示。
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, MidpointRounding.AwayFromZero);
x1, y1 是第一个坐标,x2, y2 是第二个坐标。最后一行是平方根,四舍五入到小数点后 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