Линии и фигуры нарисованы под неправильными углами
У меня есть программа 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 будет наверху.