Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/25: Рейтинг темы: голосов - 25, средняя оценка - 4.72
0 / 0 / 0
Регистрация: 28.02.2019
Сообщений: 12

Поведение идеального газа на черепашках

24.11.2020, 02:17. Показов 5326. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет.
Подскажите, как можно визуализировать с помощью черепашек (turtle) поведение идеального газа. Подразумевается, что молекулы отталкиваются друг от друга, когда близко подлетают. Загвоздка именно в алгоритме.
Я создаю список молекул с координатами Х, У и углом направления движения. Считаю, что когда дистанция между 2 молекулами становится меньше, например 10, то они должны поменять угол направления.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.11.2020, 02:17
Ответы с готовыми решениями:

Поведение молекул идеального газа в закрытом сосуде
Задача: Написать программу, отображающую поведение молекул идеального газа в закрытом сосуде. a) Создается N потоков, каждый из которых...

Поведение молекул идеального газа в закрытом сосуде
Задача: Написать программу, отображающую поведение молекул идеального газа в закрытом сосуде. a) Создается N потоков, каждый из которых...

Продемонстрировать поведение идеального газа в закрытом сосуде
Задача: составить программу на Visual Basic.net 2008 показывающая поведение идеального газа в закрытом сосуде

9
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
24.11.2020, 06:43
Ну у каждой черепашки будет две переменных: направление движения (в радианах) и набранный импульс/скорость. Упростим, что масса у всех одинаковая и столкновения абсолютно упругие.

Рисуем "поле" и, допустим, 10 черепашек-молекул. Каждой назначаем случайные координаты, направление движения и скорость.

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

Добавлено через 33 секунды
Если ещё упростить, то можно сделать всем скорость одинаковой
0
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
24.11.2020, 10:00
Фырфа, а много черепашек-то будет? Боюсь, в перфоманс упрётесь.
Это ж n^2 операций по расчёту близости.

Добавлено через 2 минуты
Пожалуй, для перфоманса надо считать не абсолютное расстояние, а попадание в одну клетку.
Делим наше поле на клетки, если две черепашки попали в одну - считаем, что столкнулись. Состояние клеток (сколько там черепашек) хранить отдельно.
0
0 / 0 / 0
Регистрация: 28.02.2019
Сообщений: 12
24.11.2020, 19:48  [ТС]
dondublon
Фырфа, а много черепашек-то будет? Боюсь, в перфоманс упрётесь.
Это ж n^2 операций по расчёту близости.

Добавлено через 2 минуты
Пожалуй, для перфоманса надо считать не абсолютное расстояние, а попадание в одну клетку.
Делим наше поле на клетки, если две черепашки попали в одну - считаем, что столкнулись. Состояние клеток (сколько там черепашек) хранить отдельно.
Количество черепашек варьируется. Чем больше черепашек, тем дольше все считается. Я пытался делать так: беру 1-ю молекулу, двигаю ее на 2 пикселя вперед, дальше запускаю цикл по всем остальным молекулам и спрашиваю какое расстояние между 1ой и i-ой молекулой. Если меньше 10, то меняю угол движения у 1ой и i-ой молекулы. Далее беру 2-ую молекулу, двигаю на 2 пикселя вперед и т.д.
По факту, когда молекулы приближаются, они не расходятся, а почти накладываются друг на друга и начинают вертеться вокруг своей оси.
Еще большой вопрос по поводу угла отскока. Как рассчитать(=понять), куда отскочит одна молекула от другой?
С клетками интересная идея, надо попробовать.

Добавлено через 12 минут
Рыжий Лис
Ну у каждой черепашки будет две переменных: направление движения (в радианах) и набранный импульс/скорость. Упростим, что масса у всех одинаковая и столкновения абсолютно упругие.

Рисуем "поле" и, допустим, 10 черепашек-молекул. Каждой назначаем случайные координаты, направление движения и скорость.

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

Если ещё упростить, то можно сделать всем скорость одинаковой
У меня есть объекты черепашки и я могу знать их состояния (координаты, скорость, угол и т.д.). Скорость у всех одинаковая. Да, масса одинаковая, и отталкиваются упруго. От стенок они у меня отталкиваются успешно. А вот засечь столкновение с другими молекулами не знаю как.
Запускается цикл на 100 итераций, в котором еще один цикл перебора каждой молекулы, где каждая молекула двигаются по одной на 2 пикселя вперед. Я добавляю еще один цикл расчета расстояния между 2-мя молекулами, и если расстояние меньше 10, то они расходятся. Только это все не работает :-)
0
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
24.11.2020, 20:26
Фырфа,
От стенок они у меня отталкиваются успешно.
Если так, то почему бы для каждой "встречи" "противоположную" молекулу не считать "стеной" с конфигурацией = её траектории?..
0
0 / 0 / 0
Регистрация: 28.02.2019
Сообщений: 12
24.11.2020, 20:46  [ТС]
Gdez
Если так, то почему бы для каждой "встречи" "противоположную" молекулу не считать "стеной" с конфигурацией = её траектории?..
Спасибо. Попробую вариант со "стенкой". Меня смущает, что получается слишком много операций и все начинает подвисать. Поэтому я спрашиваю совета - предполагаю, что есть какой-то другой способ описания этого поведения.
0
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
24.11.2020, 21:05
Фырфа, обработка как в "Жизнь"

Добавлено через 5 минут
А вот чтобы была именно имитация, хотя бы скорость должна быть разной. А для упрощения считать импульс одинаковым. Ну и поле по минимуму. Например 20*20 и молекул < 10

Добавлено через 8 минут
А еще можно так - если есть соседи (8 клеток), то рандомно меняется направление (молекула, кроме координат, содержит направление в виде числа от 1 до 9). Если нет, продолжать движение. Думаю, проще будет...
0
0 / 0 / 0
Регистрация: 28.02.2019
Сообщений: 12
25.11.2020, 00:42  [ТС]
Gdez

Вот код

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import turtle
from random import randint
 
 
number_of_turtle = 10
steps_of_the_time_number = 100
 
 
pool = [turtle.Turtle(shape='turtle') for i in range(number_of_turtle)]     # создаем пул черепашек
 
for unit in pool:       # задаем каждой координаты, скорость, размер и угол поворота
    unit.turtlesize(0.4)
    unit.penup()
    unit.speed(randint(0, 10))
    unit.goto(randint(-200, 200), randint(-200, 200))
    unit.seth(randint(0, 360))
 
 
for i in range(steps_of_the_time_number):
    for g in range(len(pool)):
        angle1 = pool[g].heading()  # угол Г-ой молекулы
        x1, y1 = pool[g].pos()      # координаты положения Г-ой молекулы
        for h in range(len(pool)):  # перебор молекул не равных Г-той
            if g != h:
                x2, y2 = pool[h].pos()
                angle2 = pool[h].heading()
                dx = abs(x1-x2)     # расстояние между координатами Х Г-ой и Х-ой(хетой) молекулой
                dy = abs(y1-y2)     # расстояние между координатами У Г-ой и Х-ой молекулой
                if dx <= 3 and dy <= 3:     # если расстояние меньше 3 (попали в одну клетку с диагональю 3*sqrt(2))
                    pool[h].seth(-angle2)   # развернулась Х-ая молекула
                    pool[g].seth(-angle1)   # развернулась Г-ая молекула
                    pool[h].fd(5)           # движение на 5 вперед, чтобы выйти из клетки
                    pool[g].fd(5)           # движение на 5 вперед, чтобы выйти из клетки
        if x1 < -200 or x1 > 200:           # отскок от горизонтальных стенок
            pool[g].seth(180 - angle1)
        elif y1 < -200 or y1 > 200:         # отскок от вертикальных стенок
            pool[g].seth(-angle1)
        pool[g].fd(5)                       # движение вперед на 5
Если посмотрите на наличие ошибок в логике или коде, то буду премного благодарен.
0
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
25.11.2020, 09:32
Цитата Сообщение от Фырфа Посмотреть сообщение
Количество черепашек варьируется. Чем больше черепашек, тем дольше все считается.
Кэп
Потому и спрашивал, много ли. Если сто тыщ - уже будет серьёзно тормозить, при наивном решении. Я говорил про порядок, n^2. Т. е. при увеличении в 2 раза количество сравнений возрастёт в 4.
Цитата Сообщение от Фырфа Посмотреть сообщение
Еще большой вопрос по поводу угла отскока. Как рассчитать(=понять), куда отскочит одна молекула от другой?
Тут как раз просто. Если считаем черепашек идеальными кругляшками - угол падения равен углу отражения, ура.

Добавлено через 3 минуты
Цитата Сообщение от Фырфа Посмотреть сообщение
сли посмотрите на наличие ошибок в логике или коде, то буду премного благодарен.
У меня от такого глаза разбегаются. Код должен быть разбит на функции и классы (исключение, когда можно без классов - при хранении данных в массивах numpy).
0
0 / 0 / 0
Регистрация: 28.02.2019
Сообщений: 12
25.11.2020, 17:46  [ТС]
dondublon

Цитата Сообщение от dondublon Посмотреть сообщение
Кэп
Потому и спрашивал, много ли. Если сто тыщ - уже будет серьёзно тормозить, при наивном решении. Я говорил про порядок, n^2. Т. е. при увеличении в 2 раза количество сравнений возрастёт в 4.
В программе у меня их 10. Думаю, что этого достаточно для визуала и более-менее скорости передвижения молекул.

Тут как раз просто. Если считаем черепашек идеальными кругляшками - угол падения равен углу отражения, ура.
Ну да, черепашек я считаю кругляшами, я к этому по итогу и пришел. Был еще вариант, что угол отскока может равняться 180-угол падения(как о вертикальную стенку), но решил все отскоки сделать с простым отражением.

У меня от такого глаза разбегаются. Код должен быть разбит на функции и классы (исключение, когда можно без классов - при хранении данных в массивах numpy).
Я попробую сделать всё через функции. Классы еще не проходил пока. Последний камень преткновения - когда черепашки встречаются, они не всегда могут сразу разойтись, а еще вертятся некоторое время.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.11.2020, 17:46
Помогаю со студенческими работами здесь

График для идеального газа. Выразите через заданные на графике величины работу газа
На рисунке изображен циклический процесс для идеального газа. Выразите через заданные на графике величины работу газа за цикл.

Работа идеального газа
Определить работу nu-молей идеального одноатомного газа при расширении от объема V1 до объема V2 в процессе, при котором температура...

Модель идеального газа.
Здравствуйте. Есть код проги, описывающий движение молекул идеального газа, вот он: #include &lt;graphics.h&gt;; #include...

Модель идеального газа
Помогите пожалуйста отлатать эту программу, не пойму в чем ошибки program model; uses Crt, Graph; type Molecula=record ...

Модель идеального газа
Реализовать программу, моделирующую поведение идеального газа в замкнутом пространстве. Молекула - это кружок случайного цвета со случайной...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20%
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru