Есть карта высот местности. Необходимо построить зону прямой видимости вокруг объекта с заданным радиусом.
Я решаю эту задачу таким образом: сначала определяю окружность с помощью алгоритма Бразенхейма; затем из каждой точки окружности провожу линию к центру, опять с помощью алгоритма того-же дядьки; определяю высоту каждой точки и заполняю вектор; затем пробегаюсь по этому вектору - поочерёдно для каждой точки строю линию к центру и проверяю если есть на её пути точки с большей высотой, то точка невидима, и т.д.
Алгоритм работает, но медленно, и есть артефакты (с которыми можно примириться), т.к. под проверку попадают не все точки круга, а если проверять их все, то получится еще тормознее. Я так думаю данная задача не раз решалась и есть какие-то более хитрые алгоритмы. Ткните носом или подскажите как решить её более оптимально. Если что, ЯП C++.