Вычисляет угол, под которым точка находится к началу координат

Введение

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


Вычисление координат точки по углу и радиусу

Метод DegreesToXY принимает угол в градусах, радиус и начальную точку (origin). Он возвращает координаты точки, находящейся под этим углом на заданном расстоянии от origin.

/// <summary>
/// Вычисляет точку, находящуюся под углом от начала координат (0 справа)
/// </summary>
private PointF DegreesToXY(float degrees, float radius, Point origin)
{
    PointF xy = new PointF();
    double radians = degrees * Math.PI / 180.0;

    xy.X = (float)Math.Cos(radians) * radius + origin.X;
    xy.Y = (float)Math.Sin(-radians) * radius + origin.Y;

    return xy;
}

/// <summary>
/// Вычисляет угол, под которым точка находится к началу координат (0 справа)
/// </summary>
private float XYToDegrees(Point xy, Point origin)
{
    int deltaX = origin.X - xy.X;
    int deltaY = origin.Y - xy.Y;

    double radAngle = Math.Atan2(deltaY, deltaX);
    double degreeAngle = radAngle * 180.0 / Math.PI;

    return (float)(180.0 - degreeAngle);
}
  • Используем преобразование градусов в радианы (degrees * Math.PI / 180).
  • Координаты рассчитываются с помощью косинуса и синуса.
  • Угол 0 градусов соответствует направлению вправо от origin.

Вычисление угла по координатам точки

Метод XYToDegrees вычисляет угол в градусах, под которым находится точка относительно начала координат.

  • Используется Math.Atan2 для получения угла в радианах.
  • Преобразуем радианы в градусы.
  • Корректируем угол, чтобы 0 градусов был справа, и направление шло по часовой стрелке.

Заключение

Эти простые методы на C# позволяют легко преобразовывать между угловыми и координатными представлениями точек. Они полезны для позиционирования объектов по кругу, построения диаграмм или игр.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.