Егор Марчук: Да, в С надо слово enum перед типом добавлять, чтобы создать переменную.
A, B, C это не переменные, а именованные значения. А variable_1 - переменная, инициализированная значением A. Т.е. вместо абстрактных цифр, можно использовать конкретные имена. Для понятности чтения. В бинарном коде это будут просто целые числа, будто ты написал variable_2 = 1.
Роман Сохарев: В зависимости от применения, разрезать треугольник на три других может не быть нужным. Вместо этого один и тот же треугольник можно внести в две партиции. Опять же, в зависимости от вариантов использования, оверхед от дублирования треугольников может быть гораздо меньше времени дробления треугольников. Сколько-нибудь сложную геометрию в принципе невозможно разрезать пополам, не разрезая(дублируя) треугольников.
Роман Сохарев: Коллизии будут всегда на любой более-менее не квадратной геометрии. С этим приходится жить и это не страшно.
Если есть какие-то особенности в топологии, то можно привязываться к ним, чтобы оптимизировать разбиение. В принципе, плоскости могут даже не быть ортогональными и выровненными по глобальным осям, но это уже сложнее равномерно разбить.
Если нет никаких "особенностей", то можно резать ровно пополам и быть уверенным, что всё делаете правильно.
Николай: Да. Ещё можно построить BSP дерево или "матрицу" для всего уровня, чтобы разграничить все объекты по областям и проверять пересечения не между всеми объектами, а только между теми, которые находятся в одной области.
Подозреваю, что Unity или box2d делают это по умолчанию.
Кстати, даже если по честному считать пересечения полигональных мешей, то сперва лучше проверять пересечение сфер или габаритных контейнеров.
Николай: габаритный контейнер (самый примитивный) выровнен по глобальным осям координат. Благодаря этому принципиально упрощается поиск пересечений. Меш может быть не выровнен по осям и там уже придётся просчитывать пересечения для каждого полигона в меше.
Если хочется прям вообще супер-супер просто и эффективно, то вместо габаритного куба используй габаритную сферу. Там вообще все расчёты сводятся к расстоянию от точки до плоскости. Проще просто некуда.
Михаил: Я писал по адресу, который был в уведомлении. Но меня заблокировали за то, что была ссылка на вторую версию моего же приложения. И мне дали обратно доступ, чтобы я новую версию выложил. Писать им на английском, разумеется.
И я сразу не подумал, у вас приложение это агрегатор новостей? Вроде бы по правилам маркета такие запрещены. И приложения, которые только доступ к сайту обеспечивают, тоже запрещены.
Михаил: Аккаунт сразу не заблокируют. Могут заблокировать приложение, пока не исправите проблему (у меня так было). После исправления приложение разблокировали.
Если по скриншотам будет явно видно, что вы не выдаёте своё приложение за чужое, то не должны заблокировать.
Не подскажите, есть ключик у ffmpeg, чтобы в начале не выводилась информация о самом ffmpeg, а сразу о видео статистика была? Чтобы парсить поменьше.
Запускаю командой "ffmpeg -i video.avi" и сперва выдаётся вот эта лапша, которая вообще не нужна:
Антон Жилин: Я говорю не про MoveAssignable. Например, есть два объекта, ссылающиехся друг на друга по указателям. Их можно сперва разместить в векторе, затем уже связать друг с другом. Но, после этого уже нельзя изменить размер вектора, потому что указатели могут перестать указывать друг на друга.
Xano: move ничем не поможет, если есть ссылки на адреса элементов, например. Если, при изменении размера вектора, невозможно выделить память там же, где она была до этого (типа realloc), то ни emplace, ни move-семантика не поможет. Нетривиальный конструктор копирования как бы намекает, что вектор скорее всего не подойдёт. За исключением случаев, когда копируемый объект может быть разрушен и это не нарушит связи между объектами.
fshp: reserve выделяет память, но не разрешает её использовать, пока не будут добавлены элементы. reserve и resize вообще абсолютно разные проблемы решают. Если вызов конструктора копирования неприемлем, то вектор вообще лучше не использовать, а выбрать list,queue,set.
Антон Жилин: Не reserve, а resize. После reserve нельзя обращаться по индексу, только пушбэками.
Проверки доступа будут, если использовать at, вместо []. Лучше использовать at, чтобы потом меньше страдать.)
Из кодеков, которые есть на конкретной системе. Если есть видео, то пользователь его как-то смотрит, т.е. кодек в системе есть.
ffmpeg можно собрать без кодеков, чтобы использовал установленные в системе, как делают всякие media player'ы?
BaryhaLASH: (занудствующе повторяю) GA ставится за 15 секунд + перезагрузка. Не ленись.) И сразу в защищённом режиме загружайся, чтобы драйвер DirectX поставить.
Игорь Николаевич: В зависимости от того, как представлены уровни "ячейки" могут подразумевать совершенно разную реализацию.
Самое банальное, делишь всю карту на одинаковые квадраты и в каждом "квадрате" хранишь список объектов, которые в него частично или полностью попадают (сравнивая габариты объекта с габаритами "квадрата"). Так же можешь погуглить про BSP деревья и многое другое... Но банальное разделение на квадраты проще всего реализовать. При условии, что у тебя карта полностью сформирована и сразу вся подгружается, то нужный "квадрат" получается из координат объекта, даже искать ничего не нужно. Если уровень динамически подгружается, то чуть сложнее реализовать.
BaryhaLASH: Есть образы, оптимизированные для установки с флешки/диска. В виртуалке их невозможно загрузить, потому что нужны физические адреса файлов, а их нет. Если в описании образа написано, что он только для флэшек, то он только для флэшек.
A, B, C это не переменные, а именованные значения. А variable_1 - переменная, инициализированная значением A. Т.е. вместо абстрактных цифр, можно использовать конкретные имена. Для понятности чтения. В бинарном коде это будут просто целые числа, будто ты написал variable_2 = 1.