Как стать автором
Обновить
10
0
Максим @slupoke

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

Отправить сообщение

Интересно ещё и то, что скорость расчётов для маленьких сетей особо от количества элементов в пакете не зависит. Об этом говорит примерно одинаковое время, необходимое для обработки пакетов с размерами от 1 до 512. Я, опираясь лишь на собственные представления, могу объяснить это тем, что GPU — это, когда дело доходит до вычислений — невероятно быстрые системы. А вот всё остальное (CPU и прочее) работает, так сказать, медленнее.

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

У них уже есть технология Taptic Engine, которая отлично имитирует обратную связь. По собственному опыту скажу, что тактильная отдача на уровне, я через полгода узнал, что на наушниках сенсорные кнопки, а не физические

Ссылки на ресурсы интересные, сам на некоторые когда-то натыкался. В комментариях также отмечается фундаментальная литература

  1. Повторение школьной математики.

  2. Матанализ.

  3. Аналитическая геометрия.

  4. Линейная алгебра.

Честно говоря, это всего лишь основы математики, которые преподаются на 1-2 курсе ВУЗа.

Изначально я подумал, что движок ожидает однородные координаты, которые часто используются в компьютерной графике, но фраза:

просто в четвертой координате надо поставить мусор

Меня смутила, так как четвертая компонента имеет важный смысл в однородной системе координат

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

Теперь разберём все возможные случаи при проверке пересечений.

1. Обе точки внутри фигуры. Самый простой случай, просто добавляем их в контактный буфер

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

А как же такой случай?

"Кровь, пот и пиксели" от Джейсона Шрейера. Прекрасная книга

Рассмотрим градиентные фильтры Собеля и Лапласа

А где сами фильтры то?

Он подавляет пиксели в градиентном изображении, которые не являются локально максимальными по отношению к соседним пикселям. Таким образом, наше изображение градиента Собеля очищается, и выделяются только крайние пиксели, которые локально максимальны по отношению к соседним пикселям:

edges = cv2.Canny(img,100,200)
cv2.imwrite('canny.jpg',edges)

Очень информативно.

Предлагаю вам ознакомиться с биомеханическим отчетом IAAF (Международная федерация легкой атлетики) мужских финалов в беге
на 100 на Чемпионате мира по легкой атлетике. https://www.researchgate.net/publication/326468425_Men's_100m_-_2017_IAAF_World_Championships_Biomechanical_report

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

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

Необходимо учитывать все возможные траектории: https://en.wikipedia.org/wiki/Any-angle_path_planning

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

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

Верно, но у нас векторное произведение [x,y], в котором X и Y разные множества(посмотрите внимательно).
Т.е. x — ребро первого куба, а y — второго


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

Не будем заострять внимание на том, что пункта два…

Это причем?

Вы серьёзно?! Да я выкинул весь этот обзац сразу как только понял, что это частный случай не имеющий никакого отношения к габаритным размерам (что могло бы помочь сократить количество кандидатов), либо к общей теории.

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

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

Здесь много теории? Статья была написано в практическом стиле, в начале я привел ссылку на википедию, где можно познакомиться с доказательствами теоремы и углубиться в теорию.
почему на иллюстрациях разделяющие оси не параллельны граням.

Если в качестве разделяющей оси выступает векторное произведение, то ось может и не быть паралельно граням.
Совершенно верно, если объекты не пересекаются, то существует разделяющая ось. Ее нужно найти, и она не зависит от пространственных координат. В 1 акте сказано, в каких множествах ее можно найти:
Свойство. Потенциальная разделяющая ось будет находиться в следующих множествах:
  • Нормы плоскостей каждого куба(красные)
  • Векторное произведение ребер кубов {[x,y]: x∈X, y∈Y}

   где X — ребра первого куба (зеленые), а Y — второго (синие).


мы должны условно «проверить» все проекции касательных к кругу, с бесконечно малым шагом. Для трёхмерного случая, надо будет делать это дважды: сначала плоскости к сфере, а потом касательные к кругу вокруг двумерной проекции.

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

Не увидел в 3 и 4 актах, почему бесконечности заменены на какие-то оси кандидаты их будет достаточно.

О бесконечностях речь и не шла, оси кандидаты — это как раз те потенциальные разделяющие оси, которые мы нашли, и среди них существует(если объекты не пересекаются) сама разделяющая ось, проекции объектов на которую не пересекаются.

Как справляется ваш алгоритм с таким случаем?

Алгоритм мне не принадлежит, как и сама теорема, я лишь описал реализацию.
В данном примере разделяющая ось будет нормалью.
image
По поводу собственной интерпретации согласен. Моей целью было рассказать о данной теореме с точки зрения применения ее для обнаружения столкновений реальных физических твердых тел, а не углубляясь глубоко в теорию. Мне кажется, что теорема у меня достаточно достоверно звучит в контексте твердых тел. Не могли бы, привести контрпример?
При пересечении выпуклых многогранников — хотя бы одна из точек одного многогранника, внутри другого

Это не единственное условие, при котором происходит пересечение. Пример.
image

Информация

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