Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.12.2021, 19:25   #31
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,550
По умолчанию

Нормальное распределение моделируется легко:
http://stratum.ac.ru/education/textb...lection25.html
digitalis на форуме Ответить с цитированием
Старый 10.12.2021, 21:45   #32
wqerty11
Пользователь
 
Регистрация: 24.11.2021
Сообщений: 24
По умолчанию

ViktorR, Если я увеличиваю DT, то маленькие молекулы не пролетают через большую, а если увеличиваю скорость вот так:
Код:
x = -500 + rand()%(1001)
то маленькие молекулы начинают пролетать через большую, как Вы и скзаали.
wqerty11 вне форума Ответить с цитированием
Старый 11.12.2021, 06:10   #33
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

У меня тоже RAND_MAX=32767. Изменил в коде из первого сообщения строку инициализации молекул на такую:
Код:
P p0 = { rand() % 480, rand() % 480, rand() % 10000 / 50.0 - 100, rand() % 10000 / 50.0 - 100, 2 };
Стали лететь в разные стороны. Но наблюдается проблема залета мелких молекул в крупную.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 11.12.2021, 12:34   #34
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,309
По умолчанию

Алгоритмизация модели столкновения может показаться простой, но это далеко не так.
Почитал несколько статей и понял, что для небольшого числа тел её, от части, можно решить путём перебора.
Для большого числа тел используют ухищрения.
Например, как понял я, разбивая область на параллелограммы (или прямоугольники, или параллелепипеды - 3D: определяется используемой геометрией пространства).
Это позволяет составить 2-D или 3-D массив, в котором элементы массива - ID тел (или ссылка на список ID, если таких тел собралось в одной области несколько).
Тогда, для расчёта столкновений, достаточно просмотреть только соседние элементы массива.
Сам массив генерируется сортировкой перед просмотром столкновений.

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

Так подумалось, что, для упрощения отображения, можно пересчитывать координаты тел и не отображать сами моменты столкновения, а показывать состояние системы через заданные интервалы.
Т.е., если обнаружено столкновение (тело влетело в другое), то пересчитываем их положение и затем показываем.
Правда как это будет видно визуально? Тело летело влево, а теперь летит вправо вверх, например, (излом какой-то).

PS: Ссылок достаточно много и нет смысла их тут приводить.
Для ТС: Вам надо самому принять, что должна показывать ваша модель.
Тут важнее то, что при столкновении импульс передаётся большой молекуле и эта молекула совершает случайные движения.
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Pascal. Броуновское движение молекул (диффузия) vzik Помощь студентам 2 19.05.2012 11:19
Задача на Pascal ABC. Определить среднюю кинетическую энергию вращательного движения молекул водорода faqbi4vosk Помощь студентам 1 22.04.2012 17:39
движение молекул Игорь228 C++ Builder 0 11.12.2011 00:48
QBasic графика в движении Dronlion Помощь студентам 0 05.04.2011 10:29
Количество молекул воздуха в помещении Cular Microsoft Office Excel 7 23.05.2010 20:30