Как определить, содержит ли треугольник определенную точку? - PullRequest
3 голосов
/ 23 февраля 2012

У меня вопрос к вам, ребята ...

Теперь предположим, что у меня есть виртуальная сетка, и у меня есть точки соединения на этой виртуальной сетке, как показано ниже

Junction Points On Virtual Grid

Теперь предположим, что я нарисовал треугольник на этой виртуальной сетке, как показано ниже

Triangle with Points

Теперь мне интересно, есть ли точка виртуальной сетки , содержащая треугольником ... Как я могу добиться этого с помощью C # .Net?

Примечание : Я также знаю точки для треугольников, и вопрос для 2D плоскости ..

Мои наилучшие пожелания ...

Ответы [ 3 ]

8 голосов
/ 23 февраля 2012

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

надеюсь, это поможет

4 голосов
/ 23 февраля 2012
  • Скажем, ваш треугольник состоит из точек A, B и C
  • Допустим, вы хотите проверить точку P на предмет нахождения внутри треугольника

Нахождение внутри треугольника можно определить как находящееся с той же стороны (слева или справа) от всех векторов AB, BC и CA. Итак, вы

  • Создание 3d векторов AB, BC, CA с z = 0 (это нужно сделать только один раз для каждого треугольника)
  • Создание 3d векторов AP, BP, CP с z = 0 (это нужно сделать один раз для точки P)
  • Рассчитать p = ABxAP, q = BCxBP и r = CAxCP (это нужно сделать один раз для точки P)

Ваша точка находится внутри треугольника, если p, q и r имеют одинаковый знак в своих координатах z

3 голосов
/ 23 февраля 2012

Определите свой треугольник как GraphicsPath и используйте метод GraphicsPath.IsVisible (Point) , чтобы определить, содержит ли этот путь точку.

...