Введение
При работе с графикой, игровыми элементами или визуализацией часто требуется преобразовывать координаты точек в углы и обратно. Это полезно, например, для расположения объектов по кругу или вычисления направления.
Вычисление координат точки по углу и радиусу
Метод 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# позволяют легко преобразовывать между угловыми и координатными представлениями точек. Они полезны для позиционирования объектов по кругу, построения диаграмм или игр.
