Как стать автором
Обновить
1
0

Пользователь

Отправить сообщение
Это будет игра двойственная бильярду!
В обычном бильярде можно придать ускорение одному шару, что бы забить все остальные. Здесь, наверное, можно будет придать ускорение всем остальным что бы забить один.
Я не специалист в этой области, но мне приходят в голову 2 причины по которым все отразить нелья:
1) Для того что бы двигаться со скоростью света нельзя обладать массой как утверждает статья. А Земля ей обладает.
2) Земля и фотон не симетричны по той же причине по которой близнецы в парадоксе близнецов не симметричны.
Я уверен, что ваша идея будет работать корректно.

Сложность тут заключается в том, что все рассматриваемые в статье и в коментариях классы алгоритмов основаны на том, что движение транзитивно, тоесть если из А можно попасть в B, а из B в C, то из А можно попасть в C. К сожалению это не верно для видимости по прямой. По этому для построения карт видимости придется применять принципиально более сложные алгоритмы из области геометрии.
Да, контрпример для этой идеи я описал в своем первом комментарии:
e___
_##_
_##_
___p

А предыдущий написал в ответ на предположение что надо сравнивать с прямым расстоянием.

Вообщем если видимость считается не по тем же правилам по которым можно передвигаться, то все весьма нетривиально.

Впредь я буду стараться думать головой!

Рассмотрите следующий пример допуская движения по диагонали:
e_________
__________
_________p

Пример вообще без препятствий. Расстояние между игроком и монстром по прямой короче любого адекватного пути между ними по дискретным клеткам по этому монстр не будет видеть игрока по вашему алгоритму.

В случае же если местность непредставима в виде дискретного графа, то к такой задаче рассматриваемый в статье класс алгоритмов не применим вообще.

Это не совсем верно. Представьте себе карту где можно ходить только по горизонтали и вертикали, непроходимый квадрат на этой карте и монстра с игроком на противоположных углах квадрата. Как то так:
e___
_##_
_##_
___p

Расстояние между ними кратчайшее, а видимости нет.

Предложенный вами метод работает скорей всего только для плоской карты и расстояния определяемого по теореме Пифагора.
Где все понаходили олимпиадников, которые стремятся писать наиболее эффективный с точки зрения потребления ресурсов код? Это неправильные олимпиадники! Ну либо они просто занимаются ерундой от скуки в виду отсутствия интересных задач, мотивации или неудачного положения звезд на небе.

Чему олимпиады действительно учат — это решать задачи быстро и просто (ака надежно). Почему? Потому что на олимпиадах обычно очень полные тесты, покрывающие действительно все случаи, штрафы за неправильные попытки и постоянный цейтнот. Ни один олимпиадник на контесте если ему необходимо, к примеру, проверить есть ли среди 100 отрезков на плоскости пересекающиеся не будет писать выметающую прямую, а напишет брутфорс за н квадрат.

Тоесть олимпиады учат решать задачи быстро и надежно, а эффективно — только если это необходимо из-за ограничений. По-моему супер полезный набор навыков для промышленного программирования.

P.S: я учился программировать исключительно учавствуя в олимпиадах. Закончил олимпиады в 2012. Сейчас — техникал лид в Гугле. Я не думаю, что я заметно улучшил свои навыки написания кода с момента начала работы в Гугле. Тоесть навыков полученных в олимпиадах мне полностью достаточно для промышленного кодинга.

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность