2010-09-29 12 views
7

Sono in grado di calcolare i punti orizzontali e verticali, ma non riesco a capire come calcolare la distanza utilizzando i punti diagonali. Qualcuno può aiutarmi con questo.Come posso misurare i punti di distanza diagonale?

Ecco il codice per la mia misura orizzontale e verticale:

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

Supponendo che il _startPoint è già stato impostato.

alt text

In questa immagine il punto diagonale è ovviamente sbagliato.

+0

Math. Sqrt (sol1 * sol1) == Math.Abs ​​(sol1) –

risposta

17

È necessario utilizzare il teorema di Pitagora.

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

Questo è un Pitagorico, Aspetta che proverò questo. – Rye

+0

Roba buona. Ha funzionato. Grazie Andrew. – Rye

+1

+1 per suggerire il teorema di Pitagora – Xander

6

Penso che tu stai cercando la formula Euclidean distance.

In matematica, la distanza euclidea o metrica euclidea è la distanza "ordinaria" tra due punti che si misurerebbero con un righello, ed è data dalla formula pitagorica.

+0

+1 per sottolineare che ci sono in realtà molti modi per calcolare la distanza e che la distanza euclidea è probabilmente quella voluta qui. – Chris

0

Molto tempo dopo ... vorrei aggiungere che si potrebbe usare alcune funzionalità built-in di .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 semplicemente:

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