Я полагаю, что в ответе Джона отсутствует важный случай: когда диагональ полностью выходит за пределы полигона с самого начала. Представьте себе, что вы делаете диагональный «мост» двумя башнями своего многоугольника в форме буквы «u».

Мне пришлось решить эту проблему несколько лет назад, поэтому, пожалуйста, прости, если мои воспоминания немного пятнистые.
Способ, которым я решил это, состоял в том, чтобы выполнить тесты пересечения линии диагонали по каждому ребру в многоугольнике. Затем у вас есть два возможных случая: у вас было хотя бы одно пересечение или у вас не было пересечений. Если вы получаете какие-либо пересечения, диагональ не находится внутри многоугольника.
Если вы не получили никаких пересечений, вам нужно определить, находится ли диагональ полностью внутри или полностью вне многоугольника. Допустим, диагональ соединяет p [i] с p [j], что i

Как только вы это сделаете, 2D-угол диагонали будет положительным, если диагональ находится за пределами многоугольника, или отрицательным, если он находится внутри многоугольника.