Comments 13
А почему Point структура, а Physics — класс, :-)?
и std::vector вам в помощь.
и std::vector вам в помощь.
Для меня всегда разница между структурой и классом была в первую очередь эмоциональной) Структура — она как бездуховная куча данных, а класс — он как живой организм с функциями)
Я знаю компании, в которых за неотличие класса от структуры больно бьют в подсобке ногами. Под предлогом попить чаю выводят беднягу из комнаты, накидывают мешок на голову и тащат… А тимлиду выжигают на груди ещё одну звезду за то, что схалявил на собеседовании при приёме того на работу.
Эмоциональной… Вы плачете при виде заката?
Эмоциональной… Вы плачете при виде заката?
Очевидно чтобы не писать два раза public
Между прочим использование для данных реализаций структуры и класса соответсвует code style, принятом в Яндексе. Класс — имеет методы и не имеет публичных свойств. Логика работы с его свойствами инкапсулирована в нем самом. Структура же состоит из публичных свойств, а логики не содержит. Другое дело, что такие структуры получаются довольно редко.
А вот std::vector вместо C style масивов очень напрашиваются.
А вот std::vector вместо C style масивов очень напрашиваются.
Во-первых, какую вы используете нотацию для именования в коде?
Во-вторых, как мне кажется, используемый метод будет давать нестабильную симуляцию.
И, наконец, как планируется симулировать упругие отскоки? Ввиду отсутствия явного вектора скорости, отражать будет нечего.
Алсо:
Point* Points[ MAX_VERTICES ];
Почему не std::vector<Point *>?
Во-вторых, как мне кажется, используемый метод будет давать нестабильную симуляцию.
И, наконец, как планируется симулировать упругие отскоки? Ввиду отсутствия явного вектора скорости, отражать будет нечего.
Алсо:
Point* Points[ MAX_VERTICES ];
Почему не std::vector<Point *>?
Отскоки симулируются за счёт всё того же изменения координат. До обработки столкновения с твёрдым телом старая координата находится вне тела, текущая — в теле, следовательно вектор скорости направлен в тело. После обработки старая координата находится в теле, новая — вне тела. Вектор скорости направлен от тела.
А как будет задаваться масса?
И не лучше ли будет использовать традиционный подход для твердых тел, когда не производится симуляция взаимодействия вершин, а просто выделяются «макро» параметры типа положения, угла, поступательной и угловой скоростей, центра массы, массы, момента инерции? Это позволит ускорить симуляцию, т.к. при отсутствии столкновений можно не «погружаться» внутрь объекта, а просто обновлять положение, угол и скорости.
И не лучше ли будет использовать традиционный подход для твердых тел, когда не производится симуляция взаимодействия вершин, а просто выделяются «макро» параметры типа положения, угла, поступательной и угловой скоростей, центра массы, массы, момента инерции? Это позволит ускорить симуляцию, т.к. при отсутствии столкновений можно не «погружаться» внутрь объекта, а просто обновлять положение, угол и скорости.
Игра-то в итоге была написана? Обычно такие истории завершаются на стадии написания движка.
Что то я с формулами не понял. Формула Верле выглядит вот так:
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) = 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.
И вообще, с Верле будет проблема: где взять X(t-dt), ведь шаг симуляции скачет во времени. Но если учесть, что шаг постоянный — то сойдет. И это еще одно ограничение этого движка. Хотя можно исправить простым домножением на dt1/dt2.
Sign up to leave a comment.
Рэгдолл физика своими руками. Часть первая