C # найти угол между 2 заданными точками - PullRequest
0 голосов
/ 05 марта 2019

В программе, над которой я работаю, у меня есть объект (игрок) в форме треугольника, и этот треугольник должен вращаться всегда лицом к мыши.учитывая эти два момента, я пробовал разные уравнения, которые я нашел в Интернете, но ни одно из них, похоже, не работает или, по крайней мере, достаточно хорошо преформируется.

delta_x = cursor.X - pos.X;
delta_y = cursor.Y - pos.Y;
cursorAngle = (float)Math.Atan2(delta_y, delta_x) * (float)(180 / Math.PI);

это самая эффективная формула, которую я нашел, но она все еще неработает достаточно хорошо, так как он направлен на мышь только под определенными углами или расстояниями.Cursor.X и .Y - координаты мыши, а pos.X и .Y - координаты игрока.

1 Ответ

1 голос
/ 06 марта 2019

Я создал этот пример WinForm, который вычисляет угол и расстояние мыши от центра формы при каждом перемещении мыши по форме. Результат отображаю в метке.

enter image description here

Красная точка в центре формы является просто справочной панелью и не имеет никакого отношения к коду.

    private void f_main_MouseMove(object sender, MouseEventArgs e)
    {
        Point center = new Point(378, 171);
        Point mouse = this.PointToClient(Cursor.Position);

        lb_mouseposition.Text = $"Mouse Angle: {CalculeAngle(center, mouse)} / Distance: {CalculeDistance(center, mouse)}";
    }


    private double CalculeAngle(Point start, Point arrival)
    {
        var deltaX = Math.Pow((arrival.X - start.X), 2);
        var deltaY = Math.Pow((arrival.Y - start.Y), 2);

        var radian = Math.Atan2((arrival.Y - start.Y), (arrival.X - start.X));
        var angle = (radian * (180 / Math.PI) + 360) % 360;

        return angle;
    }

    private double CalculeDistance(Point start, Point arrival)
    {
        var deltaX = Math.Pow((arrival.X - start.X), 2);
        var deltaY = Math.Pow((arrival.Y - start.Y), 2);

        var distance = Math.Sqrt(deltaY + deltaX);

        return distance;
    }

Угол здесь показан в градусах от 0 до 359. Я надеюсь, что это поможет в расчете угла между вашими двумя точками.

...