2010-09-29 80 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; 
}