2010-09-29 12 views
7

Puedo calcular puntos horizontales y verticales, pero no puedo descifrar cómo calcular la distancia usando puntos diagonales. Puede alguien ayudarme con esto.¿Cómo puedo medir puntos de distancia diagonales?

aquí está el código de mi medida horizontal y vertical:

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(); 
      } 
     } 
    } 

Suponiendo que el _startPoint ya se ha ajustado.

alt text

En esta imagen el punto diagonal es obviamente erróneo.

+0

matemáticas. Sqrt (sol1 * sol1) == Math.Abs ​​(sol1) –

Respuesta

17

Debe usar el teorema de Pitágoras.

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

Este es un Pitágoras. Espera, probaré esta. – Rye

+0

cosas buenas. Funcionó. Gracias Andrew. – Rye

+1

+1 por sugerir el teorema de Pitágoras – Xander

6

Creo que usted está buscando la fórmula Euclidean distance.

En matemáticas, la distancia euclídea o la métrica euclidiana es la distancia "normal" entre dos puntos que uno medir con una regla, y viene dada por la fórmula de Pitágoras.

+0

+1 para señalar que en realidad hay muchas formas de calcular la distancia y que la distancia euclidiana es probablemente la deseada aquí. – Chris

0

Mucho tiempo después ... Me gustaría añadir que se puede utilizar alguna funcionalidad incorporada de .NET:

using System.Windows; 

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

o simplemente:

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