0 / 0 / 0
Регистрация: 28.02.2019
Сообщений: 12

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

24.11.2020, 02:17. Показов 5335. Ответов 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,318
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,318
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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru