2010-09-29 151 views
7

我可以计算水平和垂直点,但我不知道如何使用对角点计算距离。有人可以帮我弄这个吗。如何测量对角距离点?

这里是我的水平和垂直测量的代码:假设_startPoint已经设置

private float ComputeDistance(float point1, float point2) 
{ 
     float sol1 = point1 - point2; 
     float sol2 = (float)Math.Abs(Math.Sqrt(sol1 * sol1)); 

     return sol2; 
} 

protected override void OnMouseMove(MouseEventArgs e) 
    { 

     _endPoint.X = e.X; 
     _endPoint.Y = e.Y; 

     if (ComputeDistance(_startPoint.X, _endPoint.X) <= 10) 
     { 
      str = ComputeDistance(_startPoint.Y, _endPoint.Y).ToString(); 
     } 
     else 
     { 
      if (ComputeDistance(_startPoint.Y, _endPoint.Y) <= 10) 
      { 
       str = ComputeDistance(_startPoint.X, _endPoint.X).ToString(); 
      } 
     } 
    } 

alt text

在此图像对角线点显然是错误的。

+0

数学。 Sqrt(sol1 * sol1)== Math.Abs​​(sol1) – 2010-09-29 06:56:51

回答

17

您需要使用毕达哥拉斯定理。

d = Math.Sqrt(Math.Pow(end.x - start.x, 2) + Math.Pow(end.y - start.y, 2)) 
+0

这是一个毕达哥拉斯,等一下我会试试这个。 – Rye 2010-09-29 07:07:48

+0

好东西。有效。谢谢安德鲁。 – Rye 2010-09-29 07:17:38

+1

+1用于提示毕达哥拉斯定理 – Xander 2010-09-29 09:27:49

6

我认为你正在寻找的Euclidean distance公式。

在数学中,欧几里德距离或欧几里得度量是用标尺测量的两点之间的“普通”距离,由毕达哥拉斯公式给出。

+0

+1指出实际上有很多计算距离的方法,并且欧几里德距离可能是这里想要的。 – Chris 2010-09-29 10:22:26

0

大部分时间以后......我想补充一点,你可以使用.NET的一些内置的功能:

using System.Windows; 

Point p1 = new Point(x1, y1); 
Point p2 = new Point(x2, y2); 
Vector v = p1 - p2; 
double distance = v.Length; 

或者干脆:

static double Distance(double x1, double x2, double y1, double y2) 
{ 
    return (new Point(x1, y1) - new Point(x2, y2)).Length; 
}