LINUX.ORG.RU

Алгоритм определения зоны прямой видимости


0

0

Есть карта высот местности. Необходимо построить зону прямой видимости вокруг объекта с заданным радиусом.

Я решаю эту задачу таким образом: сначала определяю окружность с помощью алгоритма Бразенхейма; затем из каждой точки окружности провожу линию к центру, опять с помощью алгоритма того-же дядьки; определяю высоту каждой точки и заполняю вектор; затем пробегаюсь по этому вектору - поочерёдно для каждой точки строю линию к центру и проверяю если есть на её пути точки с большей высотой, то точка невидима, и т.д.

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


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

dinix
()

Нарыть в сети книжку «Военная топография» - там все подробно
описано.

blackice
()
Ответ на: комментарий от dinix

dinix, интересный вариант, попробую.

dOzEr
() автор топика

скопировать из grass соответствующую процедуру? :)

psv1967 ★★★★★
()

припоминаю, есть алгоритм для построения двумерной проекции трехмерного графика — емнип «метод плавающего горизонта», вот его легко можно обобщить на этот случай

З.Ы. это нужно для расчета зоны покрытия станий gsm?

www_linux_org_ru ★★★★★
()

В исходниках grass нашёл ссылку на интересную статью

www.cs.swarthmore.edu/~adanner/cs97/f06/ps/FastViewshed.ps

Сейчас изучаю, так что вопрос можно считать решённым. Всем спасибо за подсказки.

P.S. Алгоритм нужен для тактических задач. Т.е. определение зон прямой видимости цели, чтобы скрытно к ней подобраться.

dOzEr
() автор топика
Ответ на: комментарий от LamerOk

Это игра вылдродня делается имхо.

ps. Автор бы рассказал хотябы в чем идея заключается.

wfrr ★★☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.