Jun 26, 2014 23:37
Чёта я туплю...
Пусть (x1, y1),..., (xn, yn) - вершины выпуклого многоугольника. Как проще всего проверить, будет ли точка (a,b) внутри него?
В интернетах какая-то хрень, коды какие-то, понимаешь. А мне простой алгоритм нужен.
UPDATE. Всем большое спасибо, кто откликнулся. Всё теперь работает.
математика
Leave a comment
Comments 18
2. Соединяешь отрезком с (a,b)
3. Проверяешь, проходит ли отрезок через какую-либо вершину многоугольника. Если проходит - возвращаешься к п.1, где выбираешь другую точку.
4. Считаешь количество пересечений отрезка (a,b)-(a1,b1) со сторонами многоугольника.
Если количество пересечений четное - точка (a,b) вне многоугольника. Если нечетное - внутри.
Работает с любыми многоугольниками, не только с выпуклыми.
Reply
Reply
Reply
Reply
Reply
рабочий алгоритм такой :
проводим из точки луч, если внутри - число пересечений с границей нечетное, если снаружи четное.
простая Реализация - луч проводим параллельно оси х от (х_min до мах(х) т.е. надо проверить для списка ребер пересечения простым неравенеством y_n
Reply
(The comment has been removed)
Ноль должен получаться и для суммы проекций на X, и на Y.
Возьмите единичный квадрат с центром в (0,0) и любую точку вне квадрата, лежащую на оси Oy. Сумма проекций на Х даст 0.
Reply
Nn = (yn - b, a - xn)
То есть, посчитал бы N скалярных произведений pn = (Xn, Nn). Если у них у всех один знак, значит точка внутри.
Reply
Reply
Leave a comment