Шары

Аватар пользователя
fir-tree
Сообщений: 10669
Зарегистрирован: 19 июн 2008, 21:00

Шары

Сообщение fir-tree » 27 ноя 2009, 20:58

grigoriy писал(а):Source of the post Тема до сих пор висит в "горячих", хотя непонятно,чем она горяча.

"Горячими" темами форум автоматически называет те, в которых набралось много ответов. K градусу обсуждения это не имеет никакого отношения.

grigoriy писал(а):Source of the post Munin предлагает "включить свет" - предсказыватьзаранее столкновения. Если бы он изложил поподробнее...

Чего вы хотите поподробнее? Цикл сравнений каждого c каждым? Или расчёт для двух шаров, пересекаются их траектории или нет? Я и то и другое полагал настолько элементарным, что расписывать подробности - обижать собеседника.
Последний раз редактировалось fir-tree 29 ноя 2019, 19:48, всего редактировалось 1 раз.
Причина: test

Аватар пользователя
grigoriy
Сообщений: 11916
Зарегистрирован: 18 ноя 2009, 21:00

Шары

Сообщение grigoriy » 27 ноя 2009, 21:44

NewUser писал(а):Source of the post
A как просчитывать заранее стокновения?



Мне кажется, собеседник не обиделся бы...
Последний раз редактировалось grigoriy 29 ноя 2019, 19:48, всего редактировалось 1 раз.
Причина: test

Аватар пользователя
fir-tree
Сообщений: 10669
Зарегистрирован: 19 июн 2008, 21:00

Шары

Сообщение fir-tree » 27 ноя 2009, 22:47

Когда кажется, креститесь.

Вот если вы чего-то не понимаете - от своего имени и спрашивайте. A выставлять собеседника большим дураком, чем вы сами, и просить якобы за него - не стоит.
Последний раз редактировалось fir-tree 29 ноя 2019, 19:48, всего редактировалось 1 раз.
Причина: test

NewUser
Сообщений: 40
Зарегистрирован: 02 дек 2008, 21:00

Шары

Сообщение NewUser » 28 ноя 2009, 14:12

У меня времени все нет прогу дописать.B ближайшие дни соберусь.Я знал как прогу писать, просто может что то интересное услышал бы, неорденарные решения и нюансы.

P.s. Это особого смысла не меняет, но я беру приращение по x и считаю y.
Последний раз редактировалось NewUser 29 ноя 2019, 19:48, всего редактировалось 1 раз.
Причина: test

Аватар пользователя
grigoriy
Сообщений: 11916
Зарегистрирован: 18 ноя 2009, 21:00

Шары

Сообщение grigoriy » 28 ноя 2009, 15:46

fir-tree писал(а):Source of the post
Когда кажется, креститесь.

Вот если вы чего-то не понимаете - от своего имени и спрашивайте. A выставлять собеседника большим дураком, чем вы сами, и просить якобы за него - не стоит.


Давайте не будем употреблять сильных терминов.
Просто уровень подготовки участников форума разный.
Я считаю, что если человек o чем-то спрашивает,
то лучше сказать больше (в том числе и что-то,
что ему известно), чем меньше (упустив и что-то,
что ему неизвестно).


Насчет "просчитывть заранее столкновения".
Я действительно не понимаю этого.
Дело не в технической реализации, тут действительно
элементарно - перехожу в систему отсчета i-го шара
и определяю направление скоростей остальных шаров
в этой системе.

Тех, которые "целят в лоб", беру на заметку.
Самый "опасный" тот, время подлета которого
наименьшее. И так для всех шаров. Ho это
определение возможных столкновений, которые
необязательно произойдут, т.к. всегда вклинятся
посторонние шары и "испортят всю картину".
У NewUser'a их около 50.
Поэтому актуально рассмотрение шара, который
уже соприкоснулся c i-ым шаром. B этом случае
никто не успеет вмешаться. A это не заранее,
не наперед, a в текущий момент. Одним словом,
"довлеет дневи злоба его", a заглядывать
в будущее нет резона и понятие "заранее"
теряет смысл.

Прошу прощения, если я извратил смысл Вашего
замечания. Объясните, пожалуйста, что Вы имели
в виду.


NewUser писал(а):Source of the post
У меня времени все нет прогу дописать.B ближайшие дни соберусь.Я знал как прогу писать, просто может что то интересное услышал бы, неорденарные решения и нюансы.

P.s. Это особого смысла не меняет, но я беру приращение по x и считаю y.


Собирался еще дополнить процедуру фрагментом, исключающим
"залипание" шаров, но теперь воздержусь, раз все потеряло смысл.
Спасибо за тему.
Последний раз редактировалось grigoriy 29 ноя 2019, 19:48, всего редактировалось 1 раз.
Причина: test

Аватар пользователя
fir-tree
Сообщений: 10669
Зарегистрирован: 19 июн 2008, 21:00

Шары

Сообщение fir-tree » 28 ноя 2009, 17:39

grigoriy писал(а):Source of the post Просто уровень подготовки участников форума разный.

Верно.

grigoriy писал(а):Source of the post Я считаю, что если человек o чем-то спрашивает,то лучше сказать больше (в том числе и что-то,что ему известно), чем меньше (упустив и что-то,что ему неизвестно).

A вот это не всегда правильно. Очень многие вещи стоит оставлять на самостоятельную проработку, иначе они не станут понятными и не принесут пользы. Кроме того, не для всякого "больше" есть силы всё это рассказывать.

grigoriy писал(а):Source of the post Насчет "просчитывть заранее столкновения".Я действительно не понимаю этого.Дело не в технической реализации, тут действительноэлементарно - перехожу в систему отсчета i-го шараи определяю направление скоростей остальных шаровв этой системе.Тех, которые "целят в лоб", беру на заметку.Самый "опасный" тот, время подлета которогонаименьшее. И так для всех шаров. Ho этоопределение возможных столкновений, которыенеобязательно произойдут, т.к. всегда вклинятсяпосторонние шары и "испортят всю картину".У NewUser'a их около 50.

Так, всё правильно. Причём оценка "каждый c каждым" - 50*50=2500 - не такой уж большой цикл (не забыть поделить пополам). Плюс столкновения co стенками, 4*50=200.

grigoriy писал(а):Source of the post Поэтому актуально рассмотрение шара, которыйуже соприкоснулся c i-ым шаром. B этом случаеникто не успеет вмешаться. A это не заранее,не наперед, a в текущий момент. Одним словом,"довлеет дневи злоба его", a заглядыватьв будущее нет резона и понятие "заранее"теряет смысл.

Нет. Актуально рассмотрение той пары шаров, время подлёта которой наименьшее (либо пары шар-стенка). Уж этой-то паре никто не сможет помешать. Можете делать скип времени до момента столкновения (это и будет событийным моделированием). После столкновения - пересчитываете моменты столкновения для тех шаров, которые были участниками данного столкновения, и таким образом, поменяли скорости. B смысле пересчитываете моменты потенциального столкновения co всеми остальными. Цикл порядка 50.

Сложным моментом является эпсилон-близость (другой и брать нельзя, поскольку работаете на машине c конечной точностью) двух событий по времени. Пока два близких события находятся пространственно далеко друг от друга, их можно рассчитать в любом порядке. Ho по закону подлости у вас будут возникать столкновения трёх тел. Если повысить точность, ситуация не улучшится, просто вместо одного столкновения трёх тел у вас посыплются мелкодробные удары двух тел, которые завалят вашу очередь событий, a модельное время увязнет (да ещё и эпсилон-близость по координате потребуется аккуратно учитывать). Вот эту проблему я на практике не решал, c ней наверняка есть способы борьбы, мне приходит на ум только принудительный арбитраж, типа "вы после трёхтельного столкновения полетите вот так-то и так-то, не по физике, a потому что я так сказал!". Впрочем, решать эту проблему стоит только в случае, если она возникнет.
Последний раз редактировалось fir-tree 29 ноя 2019, 19:48, всего редактировалось 1 раз.
Причина: test

Аватар пользователя
grigoriy
Сообщений: 11916
Зарегистрирован: 18 ноя 2009, 21:00

Шары

Сообщение grigoriy » 28 ноя 2009, 18:39

Спасибо, что хватило сил на "больше".
Последний раз редактировалось grigoriy 29 ноя 2019, 19:48, всего редактировалось 1 раз.
Причина: test

Аватар пользователя
zykov
Сообщений: 1777
Зарегистрирован: 02 ноя 2009, 21:00

Шары

Сообщение zykov » 28 ноя 2009, 19:24

grigoriy писал(а):Source of the post
Насчет "просчитывть заранее столкновения".
Я действительно не понимаю этого.

Для данной задачи единственный корректный подход, это определение момента удара и обсчет удара в этот момент. Если же вы просто используете какие-то не относящиеся к делу шаги по времени, то вы решаете задачу не верно.

Маленькие шаги по времени имели бы смысл для гладкой задачи, где система мало меняется на протяжение этого шага (например если бы вы обсчитывали упругий удар c конечным временем и шаг был бы много короче времени удара). Здесь же при ударе скорость меняется скачком, по этому нужно точно определить момент удара.

Если вы используете произвольные шаги и обсчитываете удар, когда расстояние между шарами меньше суммы радиусов, то вы вносите значительную ошибку, величина которой примерно равна вашему шагу по времени, поскольку на самом деле удар произошел раньше, когда расстояние было равно сумма радиусов. T.e. все равно для корректности вам нужно найти точное время удара. Тут правда может возникнуть проблема нескольких ударов c участием одного и того же шара в течение вашего шага по времени. Кроме того не имеет смысла тратить вычислительные ресурсы на интегрирование по шагам для прямолинейного движения до удара, поскольку и так легко его просчитать. Вот вы говорите, что сложность попарного сравнения квадратична в событийном моделировании. Ho зато и шаг по времени сразу большой - до следующего удара. Вам же придется для одного такого же интервала обсчитывать много маленьких шагов, так что скорее всего такая схема будет не только не точной, но и медленнее. K тому же никто не мешает оптимизировать попарное сравнение используя например локальность и максимальную скорость в системе, но это уже детали, которые не важны для ваших 50 шаров.

Вывод: если вы пишете свою программу использую постоянный шаг по времени, то её нужно переписать c учетом расчета точного времени удара.
Вообще при таком моделировании, если бы у вас было не прямолинейное движение, a скажем движение в поле или при взаимодействии шаров, используют переменный шаг по времени, который находится исходя из требований точности и текущей гладкости решения. При возникновении же скачков (как здесь ударов), шаг урезается до момента удара. Аналогично при моделировании электронных схем используется переменный шаг исходя из требований по точности и текущего поведения системы (например при выходе на стабильный режим и шаг можно увеличить), a при скачке (например при переключении тактового сигнала (clock signal)) и шаг обрезается до момента скачка (смотри программу SPICE).

fir-tree писал(а):Source of the post
Сложным моментом является эпсилон-близость (другой и брать нельзя, поскольку работаете на машине c конечной точностью) двух событий по времени. Пока два близких события находятся пространственно далеко друг от друга, их можно рассчитать в любом порядке. Ho по закону подлости у вас будут возникать столкновения трёх тел. Если повысить точность, ситуация не улучшится, просто вместо одного столкновения трёх тел у вас посыплются мелкодробные удары двух тел, которые завалят вашу очередь событий, a модельное время увязнет (да ещё и эпсилон-близость по координате потребуется аккуратно учитывать). Вот эту проблему я на практике не решал, c ней наверняка есть способы борьбы, мне приходит на ум только принудительный арбитраж, типа "вы после трёхтельного столкновения полетите вот так-то и так-то, не по физике, a потому что я так сказал!". Впрочем, решать эту проблему стоит только в случае, если она возникнет.

Честно говоря не вижу проблемы ударов нескольких шаров при событийном моделировании. Просто нужно найти удар ближайший по времени - это будет удар двух шаров или удар шара и стенки, и продвинуть время до этого момента. Далее начинаем опять такой же цикл и теперь уже будет новый удар не связанный c предыдущим. B данном случае эпсилон будет точностью машинного числа, которая для данной задачи настолько мала, что не имеет значения.
Последний раз редактировалось zykov 29 ноя 2019, 19:48, всего редактировалось 1 раз.
Причина: test

Аватар пользователя
grigoriy
Сообщений: 11916
Зарегистрирован: 18 ноя 2009, 21:00

Шары

Сообщение grigoriy » 28 ноя 2009, 19:42

zykov писал(а):Source of the post
grigoriy писал(а):Source of the post
Насчет "просчитывть заранее столкновения".
Я действительно не понимаю этого.

Для данной задачи единственный корректный подход, это определение момента удара и обсчет удара в этот момент. Если же вы просто используете какие-то не относящиеся к делу шаги по времени, то вы решаете задачу не верно... и т.д.



Спасибо, после ваших c MUNIN'ым объяснений у меня прояснилось в голове. Ho программу я не пишу, пишет NewUser, a я случайно оказался в теме и интересует это меня чисто теоретически. Еще раз спасибо!
Последний раз редактировалось grigoriy 29 ноя 2019, 19:48, всего редактировалось 1 раз.
Причина: test

Аватар пользователя
fir-tree
Сообщений: 10669
Зарегистрирован: 19 июн 2008, 21:00

Шары

Сообщение fir-tree » 28 ноя 2009, 20:52

zykov писал(а):Source of the post Честно говоря не вижу проблемы ударов нескольких шаров при событийном моделировании.

A вы сначала прикиньте эту задачу аналитически. Простейший пример: три шара на одной линии, сталкиваются в один момент. После первой шишки от граблей посмотрите, что будет, если они сталкиваются почти в один момент. A потом прикиньте, как это будет система событийного моделирования переваривать. C учётом того, что ей, вообще-то, хорошо бы результаты выдавать не в час по чайной ложке.

zykov писал(а):Source of the post B данном случае эпсилон будет точностью машинного числа, которая для данной задачи настолько мала, что не имеет значения.

Ну, нельзя так. Эпсилон надо фиксировать, a не полагаться на машинную точность - у машины запятая гуляет, и погрешность тоже. И фиксировать c запасом. Вы, вроде, знакомы c проблематикой моделирования, что же вы не закладываете управление точностью?

C другой стороны, эпсилон может всплыть и по физическим соображениям. B некоторых смыслах (в том числе для расчёта трёх тел) может быть удобно заменить абсолютно жёсткие шары на шары c конечной жёсткостью, разумеется, не моделируя столкновение в деталях, a просто считая его конечным по времени (и происходящим по заранее аналитически обсчитанному шаблону, хотя бы и равноускоренно - детали тут мало важны). Тогда трёхтельное столкновение будет просто рассчитываться из физических соображений, когда интервалы столкновений пар тел перекрываются.
Последний раз редактировалось fir-tree 29 ноя 2019, 19:48, всего редактировалось 1 раз.
Причина: test


Вернуться в «Физика»

Кто сейчас на форуме

Количество пользователей, которые сейчас просматривают этот форум: нет зарегистрированных пользователей и 30 гостей