Для меня всегда разница между структурой и классом была в первую очередь эмоциональной) Структура — она как бездуховная куча данных, а класс — он как живой организм с функциями)
Я знаю компании, в которых за неотличие класса от структуры больно бьют в подсобке ногами. Под предлогом попить чаю выводят беднягу из комнаты, накидывают мешок на голову и тащат… А тимлиду выжигают на груди ещё одну звезду за то, что схалявил на собеседовании при приёме того на работу.
Эмоциональной… Вы плачете при виде заката?
Он выбрал неподходящее слово, но я его понимаю. Отличий в C++ мало для структур и классов, только доступом по умолчанию. Как кто-то писал «главное идейное отличие».
Между прочим использование для данных реализаций структуры и класса соответсвует code style, принятом в Яндексе. Класс — имеет методы и не имеет публичных свойств. Логика работы с его свойствами инкапсулирована в нем самом. Структура же состоит из публичных свойств, а логики не содержит. Другое дело, что такие структуры получаются довольно редко.
А вот std::vector вместо C style масивов очень напрашиваются.
Во-первых, какую вы используете нотацию для именования в коде?
Во-вторых, как мне кажется, используемый метод будет давать нестабильную симуляцию.
И, наконец, как планируется симулировать упругие отскоки? Ввиду отсутствия явного вектора скорости, отражать будет нечего.
Отскоки симулируются за счёт всё того же изменения координат. До обработки столкновения с твёрдым телом старая координата находится вне тела, текущая — в теле, следовательно вектор скорости направлен в тело. После обработки старая координата находится в теле, новая — вне тела. Вектор скорости направлен от тела.
И не лучше ли будет использовать традиционный подход для твердых тел, когда не производится симуляция взаимодействия вершин, а просто выделяются «макро» параметры типа положения, угла, поступательной и угловой скоростей, центра массы, массы, момента инерции? Это позволит ускорить симуляцию, т.к. при отсутствии столкновений можно не «погружаться» внутрь объекта, а просто обновлять положение, угол и скорости.
Что то я с формулами не понял. Формула Верле выглядит вот так:
X(t+dt) = 2*X(t) — X(t-dt) + A(t) * dt^2 (скобки раскрывать нельзя)
где:
X(t+dt) — новая позиция;
X(t) — текущая позиция;
X(t-dt) — предыдущая позиция;
A(t) — текущее ускорение;
dt — промежуток времени.
Первую систему вообще не понял. Вы берете формулу из равноускоренного движения и подставляете в формулу равномерного движения. Оно не становиться от этого равноускоренным. Систему нужно обосновать.
У него в коде как раз-таки правильная формула, а в статье неправильная.
И вообще, с Верле будет проблема: где взять X(t-dt), ведь шаг симуляции скачет во времени. Но если учесть, что шаг постоянный — то сойдет. И это еще одно ограничение этого движка. Хотя можно исправить простым домножением на dt1/dt2.
Рэгдолл физика своими руками. Часть первая