Пространственные Структуры данных для перемещения объектов?

Разница между методами, которые вы описали, заключается в том, что первый метод - это bind mount , а другой - том . Это больше функций Docker (нежели Docker Compose), и есть несколько преимуществ, которые предоставляют тома при монтировании пути из файловой системы вашего хоста. Как описано в документации, они:

  • проще создавать резервные копии или переносить
  • можно управлять с помощью docker volumes или API (в отличие от необработанной файловой системы) [119 ]
  • работа с контейнерами как Linux, так и Windows
  • может безопасно использоваться несколькими контейнерами
  • может иметь контент, предварительно заполненный контейнером (при монтировании bind иногда приходится копировать данные , а затем перезапустите контейнер)

Другим значительным преимуществом использования томов являются драйверы томов , которые вы указали бы вместо local. Они позволяют удаленно хранить тома (например, в облаке и т. Д.) Или добавлять другие функции, такие как шифрование. Это является основой концепции контейнеров, потому что если запущенный контейнер не имеет состояния и использует удаленные тома, вы можете перемещать контейнер между узлами, и его можно запускать без перенастройки.

Поэтому рекомендуется использовать тома Docker. Другим хорошим примером является следующий:

services:
  webserver_a:
    volumes:
      - ./serving/prod:/var/www
  webserver_b:
    volumes:
      - ./serving/prod:/var/www
  cache_server:
    volumes:
      - ./serving/prod:/cache_root

Если вы переместите каталог ./serving куда-нибудь еще, привязка монтирования прекратится, потому что это относительный путь. Как вы заметили, тома имеют псевдонимы и управляют их путем Docker, поэтому:

  1. вам не нужно будет находить и заменять путь 3 раза
  2. тома с помощью [114 ] хранит данные где-то еще в вашей системе и будет продолжать монтировать просто отлично

TL; DR: попробуйте и используйте тома. Они переносимы и поощряют действия, которые уменьшают зависимости от вашего хост-компьютера.

17
задан David Segonds 25 October 2008 в 01:11
поделиться

5 ответов

Один интересный метод для того, чтобы сделать обнаружение коллизий должен использовать по оси выровненные ограничительные рамки (AABB's), организованный в специальной структуре дерева октантов. Справка AABB, потому что они делают крупные вычисления коллизии очень быстрыми, чтобы сделать, потому что только необходимо выполнить до 6 сравнений.

существует несколько приемов, которые необходимо использовать со структурой дерева октантов:

1) площадь ограничения, которую занимает узел, должна быть вдвое более большой, чем это было бы для нормального дерева октантов (где дерево октантов делит пространство без перекрытия). Поскольку каждый узел должен перекрыть половину области своих соседних узлов. Так как AABB может принадлежать только одному узлу, которым этот дополнительный размер и перекрытие позволяют ему оставаться в одном узле в течение более длительного промежутка времени.

2) Также в каждом узле - и вероятно на каждом уровне иерархии - Вы сохраняете ссылки на соседей узла. Это включит много дополнительного кода, но он позволит Вам перемещать элементы между узлами в близко к O (1) время, а не O (2logn) время.

, Если дерево октантов поднимает слишком много памяти, Вы могли бы изменить его для использования редкой структуры дерева октантов, только сохранив дерево для частей игрового мира, который на самом деле содержал объекты. Однако это означало бы, что необходимо будет выполнить больше вычислений для каждого кадра, когда объекты перемещаются через мир.

Некоторые другие идеи, которые Вы могли бы хотеть попробовать вместо дерева октантов, состоят в том, чтобы использовать kd-дерево (я полагаю, что это - корректное имя), или используйте AABB's для создания структуры с самого начала.

деревья KD (из памяти) делят пространство, использующее по оси выровненные плоскости, таким образом они - подходящий вариант для использования с AABB.

другая идея вместо того, чтобы вынудить поколение дерева октантов покинуть вершину вниз (запускающийся с поля envoloping целый мир), Вы создаете его от основных объектов и создаете больший AABB's, которые растут, пока самый большой не охватывает целый мир. Хотя я не уверен в том, как это работало бы со многими быстро двигающимися объектами.

(Это было некоторое время, так как я сделал этот вид пространственного кодирования разработки игр.)

2
ответ дан 30 November 2019 в 14:39
поделиться

разверните и сократите широкую фазу + gjk узкая фаза

0
ответ дан 30 November 2019 в 14:39
поделиться

RDC может быть полезным, особенно если Ваши объекты редки (не много пересечений).

0
ответ дан 30 November 2019 в 14:39
поделиться
  1. можно разделить сцену в дереве октантов и использовать когерентность сцены. Ваш движущийся объект, который Вы тестируете, будет в определенном узле дерева для определенного количества кадров в зависимости от ее скорости. Это означает, что можно предположить, что это будет в узле и поэтому быстро отключит много объектов, которые не находятся в узле. Конечно, хитрый бит - когда Ваш объект близко к краю Вашего раздела, необходимо было бы удостовериться, что Вы обновляете, в каком узле объект находится.

  2. объект перемещения А имеет направление и скорость. Можно легко разделить сцену на два раздела при помощи перпендикулярного подразделения от направления объектов перемещения. Любой объект на неправильной стороне этого подразделения не должен быть проверен. Конечно, компенсируйте скорость другого объекта. Таким образом, если другой объект разумен медленный, можно легко сократить его из дальнейших проверок.

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

  4. можно взять расстояние между объектом и другим движущимся объектом плюс скорости. Если другой движущийся объект перемещается в то же общее направление в более быстрой скорости, можно устранить его из проверки.

  5. существует много другой оптимизации в зависимости от формы объекта. Круги или квадраты или более сложные формы, у всех есть определенная оптимизация, которую можно сделать при перемещении.

  6. Принятие некоторых объектов действительно останавливается или может прекратить перемещаться, можно отслеживать объекты ту остановку. эти объекты могут, чем рассматриваться как статические объекты, и поэтому проверки быстрее, и можно применить все статические методы оптимизации к ним.

  7. я знаю о больше, но не могу думать ни о ком первое, что пришло на ум. Не выполнили в этом некоторое время.

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

5
ответ дан 30 November 2019 в 14:39
поделиться

Ограничение Сфер, вероятно, помогло бы Вам со многими движущимися объектами; Вы вычисляете радиус, в квадрате из объекта, и отслеживаете его от, он - центр. Если квадрат расстояния между центрами двух объектов является меньше, чем сумма радиусов в квадрате двух объектов, то у Вас есть потенциальная коллизия. Все сделанное с квадратами расстояний; никакие квадратные корни.

можно отсортировать ближайших соседей по минимальному квадрату расстояния между объектами. Обнаружение коллизий может стать сложным, конечно, и с несферически имеющими форму объектами, Ограничивание Сфер не обязательно получит Вас информация о коллизии, но это может сократить Ваше дерево объектов, которые необходимо сравнить для коллизии вполне приятно.

необходимо будет, конечно, отследить ЦЕНТР объекта; и идеально Вы хотели бы за каждый объект быть твердыми, избежать необходимости повторно вычислять размеры сферы ограничения (хотя перерасчет не особенно жесток, особенно при использовании дерева твердых объектов каждый с их собственной сферой ограничения для объектов, которые нетверды; но это сложно).

В основном, для ответа на вопрос о структурах данных можно сохранить все объекты в основном массиве; у меня был бы ряд массивов "региона", которые состоят из ссылок на объекты в основном массиве, в который можно отсортировать объекты быстро основанный на их декартовых координатах; "региону' массивы нужно определить перекрытие, по крайней мере, 2x самый большой объектный радиус в Вашем массиве объекта шаблона (если это выполнимо; вопрос объекта, ограничивающего сферу, масштабирующуюся по сравнению с количеством объектов, очевидно, подходит).

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

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

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

, вероятно, существует комната в этом виде алгоритма для использования деревьев в динамическом определении региона для вечера размеров региона, чтобы гарантировать, что размер региона не растет слишком быстро с "переполненными" регионами; такая вещь, тем не менее, нетривиальна, потому что с объектами отличающихся размеров, Ваш вид на плотности становится... сложным по меньшей мере.

2
ответ дан 30 November 2019 в 14:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: