7 Stimmen

Wie kann ich diagonale Abstandspunkte messen?

Ich kann horizontale und vertikale Punkte berechnen, aber ich kann nicht herausfinden, wie ich den Abstand mit diagonalen Punkten berechnen kann. Kann mir jemand dabei helfen?

Hier ist der Code für meine horizontale und vertikale Messung:

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

Vorausgesetzt, dass der _startPoint bereits gesetzt wurde.

alt text

In diesem Bild ist der diagonale Punkt offensichtlich falsch.

18voto

Andrew Cooper Punkte 31583

Sie müssen den Satz des Pythagoras anwenden.

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

6voto

Greg Hewgill Punkte 882617

Ich glaube, Sie suchen nach dem Euklidischer Abstand Formel.

In der Mathematik ist der euklidische Abstand oder die euklidische Metrik der "gewöhnliche" Abstand zwischen zwei Punkten, den man mit einem Lineal messen würde, und wird durch die pythagoreische Formel angegeben.

3voto

Yves M. Punkte 3330

0voto

heltonbiker Punkte 24989

Viel Zeit später... Ich möchte hinzufügen, dass Sie einige eingebaute Funktionen von .NET verwenden können:

using System.Windows;

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

oder einfach:

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X