我有两个点(x1,y1)和(x2,y2)。我想知道这些点是否在5米之内。
答案 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:
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