как определить угол поворота многоугольника - PullRequest
2 голосов
/ 24 марта 2009

Я пишу программу (.net) для создания макета в стиле стадиона, и мне нужно определить угол поворота для каждого многоугольника по сравнению с горизонтальным.

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

Учитывая приведенное ниже изображение в качестве примера, чтобы смоделировать каждый вариант направления движения (обозначено красной линией), как я могу определить угол поворота, необходимый для того, чтобы форма имела красную линию сверху, как уже показано форма 5.

http://i40.tinypic.com/16ifhoo.gif alt text

Я нашел логику для определения угла точек, составляющих красную линию, но мне также нужно знать угол поворота, чтобы вернуть его в горизонтальное положение.

Я не уверен, нужна ли мне какая-то центральная контрольная точка для всех полигонов, чтобы помочь.

Как мне лучше всего решить эту проблему?

Ответы [ 3 ]

0 голосов
/ 24 марта 2009

Если вы знаете угол красной линии для какого-либо многоугольника (скажем, a ), то этот многоугольник находится на той или иной стороне этой линии. Итак:

  • Используйте средний цвет некоторых пикселей рядом с линией с обеих сторон, чтобы определить, в чем дело.
    • Если многоугольник находится над линией, угол поворота составляет 180 + a .
    • Если многоугольник находится ниже линии, вращение будет a .

где сверху и снизу соответствуют сторонам меньшего угла и сторонам большего угла линии в соответствии с тем, как вы измеряете a .

0 голосов
/ 24 марта 2009

Функции sin, cos, tan позволяют преобразовывать соотношение сторон треугольника в градусы.

Представьте, один конец красной линии находится в точке (x1, y1), а другой конец - в точке (x2, y2). Вы можете рассматривать красную линию как гипотенузу прямоугольного треугольника и использовать арктан, чтобы получить градусы.

Соотношение между катетами составляет (x2-x1) / (y2 - y1). Вращение красной линии тогда является арктаном ((x2-x1) / (y2 - y1)). Остерегайтесь ситуаций, когда y1-y1 равен 0!

Давайте попробуем один пример из вашей картинки, полигон 6 с координатами (55, 65) и (65, 55). Введите в Google: "Арктан ((65-55) / (55-65)) в градусах"

0 голосов
/ 24 марта 2009

Я бы попытался вычислить нормальные векторы для каждой красной линии (например, 0 градусов для многоугольника 5, 45 градусов для 4, 90 градусов для 3 и т. Д.), А затем угол, на который нужно повернуть эту нормаль - и таким образом соответствующий многоугольник - так что обычные «точки вверх» должны быть очень простыми.

К сожалению, у меня нет необходимых формул для вас, но я думаю, что поиск в Google «нормального вектора» и / или его поиск в Википедии должен привести вас в порядок. Возможно, в направлении так называемого «перекрестного произведения».

Для этого не требуется центральной контрольной точки для всех полигонов (нормальное направление не связано с абсолютными координатами).

...