Ограничение рисования линии углами в 45 градусов

У меня есть начальная точка (x1,y1) и желаемая длина и угол линии.

Если бы углы были направлениями, 0 градусов — это западная сторона, 90 — северная, 180 — восточная и 270 — южная. При необходимости я могу изменить это.

Как я могу использовать начальную точку, длину и угол для определения конечной точки (x2, y2)?


person knuckfubuck    schedule 29.01.2010    source источник
comment
В каком направлении увеличиваются х и у? Я предполагаю, что x увеличивается на восток, а y увеличивается на юг, как на экране? Или y увеличивается на север, как в математике?   -  person Mark Byers    schedule 30.01.2010
comment
Да, это на экране, поэтому ваше первое предположение верно.   -  person knuckfubuck    schedule 30.01.2010
comment
Обычно E равно 0 и увеличивается против часовой стрелки.   -  person Scottie T    schedule 30.01.2010
comment
@Scottie: Поскольку y увеличивается при перемещении вниз по экрану в компьютерной графике, обычно углы увеличиваются по часовой стрелке. knuckfubuck уже заявил, что это так.   -  person BlueRaja - Danny Pflughoeft    schedule 01.02.2010


Ответы (2)


Для экрана:

Для W = 0, N = 90, E = 180, S = 270:

x2 = x1 - length * cos(angle)
y2 = y1 - length * sin(angle)

Для E = 0, N = 90, W = 180, S = 270:

x2 = x1 + length * cos(angle)
y2 = y1 - length * sin(angle)

Обратите внимание, что вам нужно убедиться, что ваша реализация cos работает в градусах, а не в радианах, иначе вы получите линии под странными углами.

person Mark Byers    schedule 29.01.2010
comment
Я изменил свои углы, чтобы начать с 0, равного E, и увеличить против часовой стрелки, как указано выше. Вот как это должно работать с этим уравнением для экрана? - person knuckfubuck; 30.01.2010
comment
Я добавил ответ для обоих способов. - person Mark Byers; 30.01.2010
comment
Если вы определяете E как 0 и идете по часовой стрелке, вы можете использовать ответ abcs. - person Mark Byers; 30.01.2010
comment
Спасибо за совет по проверке радианов против углов. Это была одна из основных проблем с моим кодом. - person knuckfubuck; 30.01.2010
comment
@knuckfubuck: Пожалуйста. Я рад, что немного дополнительной информации помогло вам. :) - person Mark Byers; 30.01.2010

x2 = x1 + длинаcos(угол)
y2 = y1 + длина
sin(угол)

В этом случае угол увеличивается против часовой стрелки, а 0 указывает на положительный х. Ось x увеличивается вправо, ось y вверх.

person abc    schedule 29.01.2010