Как я могу измерить точки диагонального расстояния? - PullRequest
7 голосов
/ 29 сентября 2010

Я могу вычислять горизонтальные и вертикальные точки, но я не могу понять, как вычислить расстояние, используя диагональные точки. Может ли кто-нибудь помочь мне с этим.

вот код моего горизонтального и вертикального измерения:

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

Предполагая, что _startPoint уже установлен.

alt text

На этом изображении диагональная точка явно неверна.

Ответы [ 4 ]

18 голосов
/ 29 сентября 2010

Вам нужно использовать теорему Пифагора.

d = Math.Sqrt(Math.Pow(end.x - start.x, 2) + Math.Pow(end.y - start.y, 2))
6 голосов
/ 29 сентября 2010

Я думаю, что вы ищете евклидово расстояние формула.

В математике евклидово расстояние или евклидова метрика - это «обычное» расстояние между двумя точками, которое можно измерить линейкой, и определяется формулой Пифагора.

3 голосов
/ 29 сентября 2010

Ну, вы можете взглянуть на: http://en.wikipedia.org/wiki/Pythagorean_theorem

0 голосов
/ 25 января 2018

Много позже ... Я хотел бы добавить, что вы можете использовать некоторые встроенные функции .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;
}
...