Как проверить видимость из точки в точку? #533319


#0 by Dirk Diggler
Есть поле 1000х1000 единиц, поделенное на клетки 10х10, итого получается сетка 100х100. Есть робот высотой 20 единиц, который может перемещаться по этому клеточному полю из клетки в клетку. У него строго в центре тела есть сенсор, высота которого произвольная( 0-20 ед). Поле заставлено прямоугольными блоками одного размера - 2х2 единицы в основании, 5 ед. высотой. Задача - _быстро_ проверить, может ли робот из клетки A,B (высота сенсора C) видеть точку X1,Y1,Z1. Как это сделать? Предпочтительны быстрые алгоритмы.
#1 by Широкий
Лазерный метр присобачь. Если расстояние геометрической и реальное совпадают - значит видит
#2 by Dirk Diggler
Это задача на программирование, если чо. Алгоритмическая.
#3 by Dirk Diggler
Сейчас работает алгоритм "полета пули" - создается точка, и протаскивается по всей траектории от начала до конца с шагом 1 ед. На каждом шаге вычисляется пересечение со всеми блоками... Это очень медленно, нужен быстрый алгоритм. Интересно, тут BSP случаем не применим?
#4 by 0xFFFFFF
"Поле заставлено прямоугольными блоками одного размера - 2х2 единицы в основании, 5 ед. высотой. " Смотря как заставлено.
#5 by a_alenkin
что значит быстрые алгоритмы? ты на счетах считать будешь? я думаю что при правильных алгоритмах решения этой геометрической задачи время различаться будет на погрешность измерения
#6 by Волшебник
Жуть
#7 by Dirk Diggler
На торце стоят. Вертикально. т.е. основание 2х2 всегда внизу. Стоят причем так, что ВСЕГДА можно наставить туда еще этих блоков так, их получилось ровно 25(5х5) на уровень. Т.е. для них клетка как бы еще порезана на 5х5 подклеточек-гнезд. Ну, bsp - быстрый алгоритм.
#8 by Asmody
если "в лоб", то строишь по двум точкам (A,B,C) и (X1,Y1,Z1) уравнение прямой и проверяешь удовлетворяют ли ему координаты блоков. Если вектора подтянуть, то вполне элегантно может получиться.
#9 by Dirk Diggler
Изначально модель выбрана не очень удачная. Приходится ковырять то, что есть....
#10 by a_alenkin
сначала реши в проекции на само поле - основание - пересечение с проекциями блоков потом уже в плоскости полета - перпендикулярной основанию
#11 by Dirk Diggler
А как узнать, какие блоки проверять? Вообще все блоки? Сейчас модель такая - блоки привязаны к клеткам в виде списков. При "протаскивании" точки клетка известна, список блоков к проверке - ограничен...
#12 by Dirk Diggler
и?
#13 by Dirk Diggler
Да, чуть не забыл. Задача осложняется тем, что блоки могут стоять друг на друге, а также просто висеть в воздухе...
#14 by НЕА123
попробовать с тем же алгоритмом, но ограничить сначала на плоскости кол-во блоков. для этого: 1. выбрать блоки которые входят либо пересекаются на пути т.е. на квадрат с диагональю А,В X1,Y1; 2. найти блоки, пересекающиеся с отрезком А,В  X1,Y1(наверное, проще всего на пересечение с диагоналями)
#15 by a_alenkin
а то что проверив проекцию на основание - ты будешь знать - какие блоки проверять уже в перпендикулярной плоскости
#16 by Dirk Diggler
Смысл? В чем будет отличие?
#17 by Asmody
на плоскости вообще всё можно было перевести в полярные координаты, где за 0й вектор взять {(A,B),(X1,Y1)}. дальше всё просто
#18 by 0xFFFFFF
Я так и не понял, как "заставлено", но, думаю уравнение прямой (геометрия 7й класс) должно помочь...
#19 by Dirk Diggler
Представь частокол из прямоугольных чурбанов,стоящих вертикально с размерами 2х2х20 единиц(допустим, дюймов). В несколько рядов и слоев. Условие - чурбан не может стоять в клетке частично(вылезая в дргугую), только целиком в ней.
#20 by Dirk Diggler
Пардон, а что такое "проверяешь удовлетворяют ли ему координаты блоков"? Блок - не точка, между прочим. А объемная фигура. Пространство у нас только на плоскости порезано, оно ж на самом деле не дискретно. ЧТо в уравнение-то подставлять?
#21 by Asmody
я думаю, автору сюда
#22 by Dirk Diggler
а уравнение, может, и должно помочь... но не помогает.
#23 by Dirk Diggler
Это я в курсе. Вот буду своё писать - обязательно воспользуюсь. ) Тут же всё-таки уже готовая модель, и надо придумать быстрый способ без её изменения.
#24 by Dirk Diggler
Хотя да, kd-tree выглядит почти тем, чем надо... Спасибо за наводку...
#25 by Dirk Diggler
есть минус... Блоки могут быть разной прозрачности...
#26 by Asmody
охренеть! ты там новый движок для квейка пишешь?
#27 by Dirk Diggler
Не. Такова игровая модель всего лишь древнего как гно мамонта Jagged Alliance 2. Без решения сабжевого вопроса не удается ничего сделать для модификации AI....
Тэги: Математика и алгоритмы
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С