Comments 31
David Baraff
www.cs.cmu.edu/afs/cs.cmu.edu/user/baraff/www/index.html
www.cs.cmu.edu/~baraff/pbm/rigid2.pdf — я вот это имел ввиду
про gpu Erwin Counmans
www.gdcvault.com/play/1017756/GPU-Rigid-Body
www.multithreadingandvfx.org/course_notes/GPU_rigidbody_using_OpenCL.pdf
www.nvidia.com/content/GTC/documents/1077_GTC09.pdf
www.cs.rpi.edu/~trink/RSS-2011/Presentations/coumans.pdf
Реально Круто! Всегда мечтал о таком!
А реализация через OpenCL или CUDA будет?
А «большие дяди» используют хотя бы метод Рунге-Кутты 4 порядка. Пишется в 4 строчки, а погрешность — O(h^2).
Рунге-Кутты 4 порядка всё же имеет 4-й порядок сходимости, соответственно O(h^4). Может вы имели в виду Рунге-Кутты 2-го порядка? Он действительно в 4 строчки.
Чуть выше уже написал, что можно делать в случае, когда тел не меньше трех.
Интересно, а как все сделано в PowderToy?
Есть какие-то способы это обойти?
Гравитационный манёвр?
Если же вы не обрабатывали это отдельно, а это был пролёт очень близко к центру масс, то всё ещё проще. Скорости около центров огромные, а влияние малейших изменений расстояния очень велико, поэтому любые погрешности (как метода, так и вычислительные) резко усиливаются. Выше писали про leap-frog, он не даст супер точности, но с энергией должно быть хорошо.
Но скорее всего в вашей задаче не нужна эта безумная точность в окрестности ноля, для небесной механики достаточно ограничить расстояние радиусом планет. При сближении на такое расстояние посчитать соударение шариков (неупругих с потерями на нагрев).
А вот касательно безумной точности вы не совсем правы. Когда клацал по чужим симуляторам (которые «решали» эту проблему через соударение) в некоторых случаях добивался точно такого же нарушения. Либо их писали раки, либо это частичное решение проблемы.
Но у меня задача была по моделированию разных вариантов гравитации для собственного любопытства. Тут именно максимальная точность нужна.
Либо их писали раки
Как бы грубо не звучало, но скорее всего так. В физдвиижках давно научились правильно обрабатывать столкновения. Это же два бильярдных шара, там всё банально считается в лоб. Вывести формулы скоростей после соударения, да тут первокурсник справится! Главное правильно отследить момент удара, а не давать погружаться телам друг в друга за один кадр.
Для любопытства это здорово, но планета — не материальная точка, у неё размер есть. Взаимодействия на сравнимых с размером дистанциях уже интереснее. Материальной точке пофиг, а протяжённые объекты получат приливной градиент. Внутри планеты тоже всё будет не так. Ровно в центре гравитация вообще 0, а не бесконечность как в формуле G*M/R^2.
Моя мысль в том, что малые расстояния находятся за пределами применимости формул небесной механики, не надо пытаться добиваться точности от них.
Автор очень так нехило замахнулся, я погляжу
Симуляцию, будь это дождь, поток воздуха над крылом самолёта или же падающий по ступенькам слинки
Два из трёх по обозначенной методике моделировать — прямо скажем идея так себе. Дождь вменяемо моделировать только стохастическим процессом, там сплошная теория вероятностей, ибо считать динамику миллиардов капель — занятие для бессмертных. Поток воздуха над крылом самолёта это уравнения Навье-Стокса, которые вообще-то в частных производных и требуют решения смешанной (начально-краевой) задачи, а не задачи Коши. Пружинка — ещё туда-сюда, но по-хорошему там тоже частные производные по пространству вылезают.
Схема численного интегрирования тоже выбрана не самая удачная, даже для задачи Коши. Хоть бы в общем виде была разностная схема, а не просто метод Эйлера. Ну и решать большие сильно-обусловленные задачи с высшими производными (которых на практике большинство) в явном виде без контроля погрешности это конечно для больших ценителей, обычно-то берется что-нибудь квазиньютоновское с переменным шагом типа CVODE.
В общем какая-то странная статья. Во введении замах на "как численно моделировать всё", а внутри "численное моделирование ньютоновской динамики для самых маленьких". Напоминает студенческий реферат чем-то.
введение оно же как рекламный плакат
Если оно "как рекламный плакат", то это называется false advertising, по-русски "ненадлежащая реклама" (в данном случае недостоверная), нет? Вот я например залез в надежде на универсальный подход, про который может быть чего-то не знаю, а нашёл… ну в общем разочарование. Претензия, безусловно, не к Вам.
Для общего представления моделирования
Оно, увы, получается совсем не общим, а очень даже узким. Потому что задачей Коши да и даже обыкновенными дифференциальными уравнениями тема не исчерпывается.
Вы меня только не поймите неправильно, на уровне "что нового я узнал за лето" статья нормальная. Просто я одно время преподавал численные методы и мне такая подача информации по старой памяти несколько против шерсти, вот я и ною.
На правах "выкрика из зала", может, чтобы не получался пересказ Маршака и Пастернака, действительно, взять непосредственно SIGGRAPH'овские конспекты вместо блога "по мотивам"? Подача материала конечно суховата, да и много там букв, но ценность статей кажется больше получится. Вот кстати материалы за 2001-й год, который Pixar никуда вроде не удалил.
Если оно «как рекламный плакат», то это называется false advertising, по-русски «ненадлежащая реклама» (в данном случае недостоверная), нет?Возможно, с натяжкой, но в защиту автора скажу, что в начале он ничего конкретного не обещал, только лишь указал на общую модель. У этой статьи, как и у других есть целевая аудитория, не все же помнят или даже проходили численные методы с дифурами. А такая подача как раз и направлена на то, чтобы заинтересовать аудиторию этими темами. И извинюсь за автора, если Ваши ожидания не оправдались :)
А за ссылку спасибо. Видимо перенесли материалы курса к себе на страницу. Обязательно передам автору.
Симуляция физического мира