Возможно, вы захотите взглянуть на алгоритмы точка-полигон, такие как алгоритм приведения лучей, описанный здесь .
Вы можете разбить треугольник, чтобы учесть препятствия, или просто сделать более сложный многоугольник. Вы должны быть в состоянии найти реализацию, которая соответствует вашим потребностям онлайн.
Вы также можете взглянуть на эту статью для вдохновения. Вы можете поддерживать древовидную структуру, корневой треугольник (или точку опоры), которую можно использовать для определения того, находится ли точка в общем положении, когда дети (треугольники) учитывают препятствия. Таким образом, вы можете быстро устранить более сложные проверки.
На изображении ниже темно-синие точки быстро исключаются из дальнейшей проверки, поскольку они не попадают в корневой треугольник просмотра.