Это будет игра двойственная бильярду!
В обычном бильярде можно придать ускорение одному шару, что бы забить все остальные. Здесь, наверное, можно будет придать ускорение всем остальным что бы забить один.
Я не специалист в этой области, но мне приходят в голову 2 причины по которым все отразить нелья:
1) Для того что бы двигаться со скоростью света нельзя обладать массой как утверждает статья. А Земля ей обладает.
2) Земля и фотон не симетричны по той же причине по которой близнецы в парадоксе близнецов не симметричны.
Сложность тут заключается в том, что все рассматриваемые в статье и в коментариях классы алгоритмов основаны на том, что движение транзитивно, тоесть если из А можно попасть в B, а из B в C, то из А можно попасть в C. К сожалению это не верно для видимости по прямой. По этому для построения карт видимости придется применять принципиально более сложные алгоритмы из области геометрии.
Рассмотрите следующий пример допуская движения по диагонали:
e_________
__________
_________p
Пример вообще без препятствий. Расстояние между игроком и монстром по прямой короче любого адекватного пути между ними по дискретным клеткам по этому монстр не будет видеть игрока по вашему алгоритму.
В случае же если местность непредставима в виде дискретного графа, то к такой задаче рассматриваемый в статье класс алгоритмов не применим вообще.
Это не совсем верно. Представьте себе карту где можно ходить только по горизонтали и вертикали, непроходимый квадрат на этой карте и монстра с игроком на противоположных углах квадрата. Как то так:
e___
_##_
_##_
___p
Расстояние между ними кратчайшее, а видимости нет.
Предложенный вами метод работает скорей всего только для плоской карты и расстояния определяемого по теореме Пифагора.
Где все понаходили олимпиадников, которые стремятся писать наиболее эффективный с точки зрения потребления ресурсов код? Это неправильные олимпиадники! Ну либо они просто занимаются ерундой от скуки в виду отсутствия интересных задач, мотивации или неудачного положения звезд на небе.
Чему олимпиады действительно учат — это решать задачи быстро и просто (ака надежно). Почему? Потому что на олимпиадах обычно очень полные тесты, покрывающие действительно все случаи, штрафы за неправильные попытки и постоянный цейтнот. Ни один олимпиадник на контесте если ему необходимо, к примеру, проверить есть ли среди 100 отрезков на плоскости пересекающиеся не будет писать выметающую прямую, а напишет брутфорс за н квадрат.
Тоесть олимпиады учат решать задачи быстро и надежно, а эффективно — только если это необходимо из-за ограничений. По-моему супер полезный набор навыков для промышленного программирования.
P.S: я учился программировать исключительно учавствуя в олимпиадах. Закончил олимпиады в 2012. Сейчас — техникал лид в Гугле. Я не думаю, что я заметно улучшил свои навыки написания кода с момента начала работы в Гугле. Тоесть навыков полученных в олимпиадах мне полностью достаточно для промышленного кодинга.
В обычном бильярде можно придать ускорение одному шару, что бы забить все остальные. Здесь, наверное, можно будет придать ускорение всем остальным что бы забить один.
1) Для того что бы двигаться со скоростью света нельзя обладать массой как утверждает статья. А Земля ей обладает.
2) Земля и фотон не симетричны по той же причине по которой близнецы в парадоксе близнецов не симметричны.
Сложность тут заключается в том, что все рассматриваемые в статье и в коментариях классы алгоритмов основаны на том, что движение транзитивно, тоесть если из А можно попасть в B, а из B в C, то из А можно попасть в C. К сожалению это не верно для видимости по прямой. По этому для построения карт видимости придется применять принципиально более сложные алгоритмы из области геометрии.
e___
_##_
_##_
___p
А предыдущий написал в ответ на предположение что надо сравнивать с прямым расстоянием.
Вообщем если видимость считается не по тем же правилам по которым можно передвигаться, то все весьма нетривиально.
Рассмотрите следующий пример допуская движения по диагонали:
e_________
__________
_________p
Пример вообще без препятствий. Расстояние между игроком и монстром по прямой короче любого адекватного пути между ними по дискретным клеткам по этому монстр не будет видеть игрока по вашему алгоритму.
В случае же если местность непредставима в виде дискретного графа, то к такой задаче рассматриваемый в статье класс алгоритмов не применим вообще.
e___
_##_
_##_
___p
Расстояние между ними кратчайшее, а видимости нет.
Предложенный вами метод работает скорей всего только для плоской карты и расстояния определяемого по теореме Пифагора.
Чему олимпиады действительно учат — это решать задачи быстро и просто (ака надежно). Почему? Потому что на олимпиадах обычно очень полные тесты, покрывающие действительно все случаи, штрафы за неправильные попытки и постоянный цейтнот. Ни один олимпиадник на контесте если ему необходимо, к примеру, проверить есть ли среди 100 отрезков на плоскости пересекающиеся не будет писать выметающую прямую, а напишет брутфорс за н квадрат.
Тоесть олимпиады учат решать задачи быстро и надежно, а эффективно — только если это необходимо из-за ограничений. По-моему супер полезный набор навыков для промышленного программирования.
P.S: я учился программировать исключительно учавствуя в олимпиадах. Закончил олимпиады в 2012. Сейчас — техникал лид в Гугле. Я не думаю, что я заметно улучшил свои навыки написания кода с момента начала работы в Гугле. Тоесть навыков полученных в олимпиадах мне полностью достаточно для промышленного кодинга.