Помойму этот подход можно заменить на обычный но без ускорения а результат распихивания добавлять в движение чем такой подход хуже этого? У него недостатки такиеже как и у описаного к томуже есть еще один недостаток при слишком большом удалении от начала координат плохо выходит...
И замедление в моем методе проще реализовать...
samrrr
> Помойму этот подход можно заменить на обычный но без ускорения а результат
> распихивания добавлять в движение чем такой подход хуже этого?
второй порядок аппроксимации по времени против первого.
Это что значит?
это значит, что точность выше
А зачем такая точность? добл используешь и всё может просто сделаешь пример?
samrrr
А также
http://ru.wikipedia.org/wiki/%D0%A0%D1%8F%D0%B4_%D0%A2%D0%B5%D0%B… E.D1.80.D0.B0
http://ru.wikipedia.org/wiki/%D0%98%D0%BD%D1%82%D0%B5%D0%B3%D1%80… 0%D0%BB%D0%B5
Пример программа а не непонятные статьи
samrrr
#include <iostream> int main() { std::cout << "Если под \"обычным\" подходом имелось в виду интегрирование по Эйлеру, то ошибка за шаг симуляции имеет порядок шага времени. " << "Тогда как в методе, описанном в статье, являющимся интегрированием по Верле без учёта ускорений, ошибка имеет порядок лишь квадрата шага времени. " << "Любой код симуляции будет лишь запутыванием предельно лаконичной статьи с Википедии про интегрирование Верле и, потому, ничего не прояснит. " << "Профит, вкратце, в том, что в первом случае симуляция будет ломаться на существенно более простых сценах, чем во втором." << std::endl; }
Нашёл статейку в которой показан обход первого ограничения http://lonesock.net/article/verlet.html
Судя по материалу, результат выходит достовернее Эйлера.
XProger
странная статья, если честно. то, что таким образом можно корректировать смещение при изменении шага по времени - очевидно. то, что при этом не потеряется второй порядок аппроксимации - нет. строгого доказательства я не увидел. а в том, что на некоторых тестах эйлер сходится медленнее, ничего удивительного нет.
Suslik
Угу, у них неправильная формула, с коэффициентом при ускорении они наврали, должно быть
\(
x_{i+1} = x_i + (x_i - x_{i-1})\frac{\tau_i}{\tau_{i-1}} + a\tau_i\frac{\tau_i + \tau_{i-1}}2.
\)
Но все равно теряется порядок, вместо третьего становится второй, поэтому физику лучше всего считать с постоянным шагом.
P.S. Скачал у них Excel-файл, поправил их формулу, получил практически точное совпадение с точным решением :)
Представим себе модель состоящую из шариков в прямоугольной коробке и все это находится в поле тяготения земли. Понятно, что у шариков есть ускорение, в статье этот случай рассмотрен и все там понятно. Но, скажем, как быть, когда шарики "устаканились", ведь если не убрать ускорение они будут слегка колебаться, что не очень приятно смотреть. Ведь когда шарик лежит на поверхности и допустим уже "зажат" шариками со всех сторон, силы реакции опор(точек касания) компенсирует силу тяжести(что, конечно, не является великим открытием), отсюда ускорение становится равным нулю. Первое что приходит в голову это считать ускорение каждый раз. Второе, когда скорость шарика становится меньше некой vmin, отключать ускорение, но тогда при взлете вертикально вверх, шарик никогда не упадет, потому что в верхней точке у него обнулится ускорение. На большее идей не хватило. В связи с тем вопрос: как проще следить за ускорением и при этом не получить сложного с точки зрения вычислительных затрат решения? Метод в статье действительно хорош и весьма прост.
Заранее извиняюсь, если на подобное ответ был уже дан, если да прошу указать где.
phizic
сила тяготения и так будет компенсирована силой реакции опоры, которая возникает при небольшом взаимопроникновении шариков. если стек из шариков имеет не слишком большую высоту, то это взаимопроникновение визуально даже не заметно. таким образом за шаг по времени каждый шарик будет получать ускорение g от свободного падения и точно такое же ускорение от воздействия на него шариков уровнем ниже.
Тема в архиве.