Войти
ПрограммированиеФорумФизика

Гравитация при х/0 и х/100500 (3 стр)

Страницы: 1 2 3
#30
23:57, 10 дек. 2019

slepov
> Вот это смущает. Это условие же всегда будет выполняться. Иначе система как то
> зависает.
> А если оно всегда выполняется то и всегда делаем цикл по объектам:
>
> foreach(obj in objects) {
> obj.MoveBy(dt);
> }
Нет. Это условие выполняется не всегда. У тебя может N объектов иметь одинаковое время. И тогда условие выполнится лишь один раз. Вот ты запихнул: obj1, obj2, obj3 на апдейт в одинаковое время, скажем была 4-ая секунда, а запихнул 5-ую. В следующий раз вытягивая obj1 ты получишь пятую секунду, и сместишь все объекты на 1 секунду. Теперь у тебя 5-ая секунда. Далее ты вытягиваешь obj2, и это снова пятая секунда. dt равно 0, и никакие объекты мы не двигаем.

> Ну определяй просто размер минимального шага как min dt по всем объектам.
Сдвинуть все объекты на dt - дешево, потому что линейное время. А вот пересчитывать влияющие силы - дорого, потому что квадратичное время. И суть динамического dt в том, чтобы минимизировать пересчет влияющих сил, и применять их только к тем объектам, которые в этом нуждаются. Мы не MoveBy оптимизируем, а EvalForce.


#31
(Правка: 3:43) 3:41, 11 дек. 2019

Dmitry_Milk
> Ну через d вот так выглядит: (d * d + С) / (d + 1)
у тебя единица получается размерная, то есть взятая с потолка, зависящая от единиц измерения константа.

Great V.
твой метод интегрирования всё равно не потянет корректный расчёт больших ускорений, которые возникают при сильном сближении частиц, поэтому не имеет особого значения, как ты это ускорение ограничишь(любой способ будет работать примерно одинаково). например, можно в знаменателе прибавить [cht]r_0^2[/cht], что имеет смысл минимального радиуса сближения частиц.

#32
11:02, 11 дек. 2019

MrShoor
> Мы не MoveBy оптимизируем, а EvalForce.

В целом вроде логично. Но все равно не нравиться мне очередь по временной величине. Она ставит крест на массивном паралеллизме  - раз. EvalDetlaTime - здесь неизбежно будет какое то деление расстояния на скорость - это два (опять деление и опять проблема малого числа). Может логичнее перейти к очереди по скоростям, не знаю.  Поле ведь тоже зависит от расстояний, а не от времени.
Ну и EvalForce это результат положения объекта и поля. А поле - самостоятельная сущность обновление которого должно отделено от фазы продвижения объектов.
Короче для меня тут хватает мутных мест.

#33
11:17, 11 дек. 2019

Suslik
> у тебя единица получается размерная, то есть взятая с потолка, зависящая от
> единиц измерения константа

Ну тогда так: (d * d + С1) / (d + С2). Тогда характеристической величиной будет C1/C2.

Страницы: 1 2 3
ПрограммированиеФорумФизика