Линии и фигуры нарисованы под неправильными углами

У меня есть программа aC#, где мне нужно нарисовать несколько простых 2D-объектов на холсте.

Один из них включает рисование прямоугольника и линий, где я знаю начальную точку, длину и мне нужно вычислить конечную позицию. Итак, у меня есть следующий код;

 private void CalculateEndPoint()
 {
            double angle = Helper.deg2rad((double)this.StartAngle);
            int x = this.StartPoint.X + (int)(Math.Cos(angle) * this.Length * -1);

            int y = this.StartPoint.Y + (int)(Math.Sin(angle) * this.Length);
            this.EndPoint = new Point(x, y);
 }

Теперь это, кажется, работает хорошо, чтобы вычислить конечные точки. У меня проблема с углом (this. StartAngle), значение, которое я указываю, кажется не таким, как оно нарисовано, и у меня, кажется, есть следующее;

Круг градусов

Где, как я ожидаю, 0 сверху, 90 справа, 180 снизу и т. Д.

Таким образом, чтобы получить форму для рисования прямо по холсту, мне нужно указать 90 градусов, где, как и следовало ожидать, указать 180.

Я сделал что-то не так? Или это просто недостаток понимания?

2 ответа

Решение

Вы должны изменить свой CalculateEndPoint функция, чтобы иметь это:

private static void CalculateEndPoint(double dec)
{
    double angle = (Math.PI / 180) * (this.StartAngle + 90); // add PI / 2
    int x = StartPoint.X + (int)(Math.Cos(angle) * Length * -1);

    double angle2 = (Math.PI / 180) * (this.StartAngle - 90); // minus PI / 2
    int y = StartPoint.Y + (int)(Math.Sin(angle2) * Length);
    EndPoint = new Point(x, y);
}

На самом деле, 0 должно быть справа. Вы умножаете x-координату на -1, поэтому перемещаете ее влево.
Просто запомните эти 2 правила:
- Косинус угла - это x-координата единичного круга.
- Синус угла - это y-координата единичного круга.
поскольку cos(0) = 1 а также sin(0) = 0координата, соответствующая углу 0, равна (1, 0).

Будь то 90 сверху или снизу, зависит от холста.
Некоторые приложения / фреймворки считают, что y-координата 0 находится в верхней части холста. Это означает, что вы идете по часовой стрелке вокруг круга, и 90 будет внизу.
Если y-координата 0 находится внизу холста, вы идете против часовой стрелки, а 90 будет наверху.

Другие вопросы по тегам