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:
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;
Run Code Online (Sandbox Code Playgroud)
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,总是出于性能原因.也许这种优化在你的情况下还为时过早,但如果代码必须执行很多次,它们就很有用.
当然你用米说话,我认为点坐标也用米表示.
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)
给定点(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)
| 归档时间: |
|
| 查看次数: |
81771 次 |
| 最近记录: |