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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.11.2021, 16:50   #11
wqerty11
Пользователь
 
Регистрация: 24.11.2021
Сообщений: 24
По умолчанию

ViktorR, Задача нужна для университета. И я знаю как выполняется вывод на экран, просто не понятен этот момент в тех местах, где они меняются
wqerty11 вне форума Ответить с цитированием
Старый 28.11.2021, 17:45   #12
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,306
По умолчанию

Код:
void timer(int = 0)
{
 ...
                    i->vx += f * (i->x - j->x) / d / i->m * DT;
                    i->vy += f * (i->y - j->y) / d / i->m * DT;
                    j->vx -= f * (i->x - j->x) / d / j->m * DT;
                    j->vy -= f * (i->y - j->y) / d / j->m * DT;
...
}
 
int main(int argc, char** argv)
{
    P p0 = { 480 / 2, 480 / 2, 0, 0, 40 };
    p.push_back(p0);
    for (int i = 0; i < 100; ++i)
    {
        P p0 = { rand() % 480, rand() % 480, rand() % 100000 / 500.0 - 100, rand() % 100000 / 500.0 - 100, 1 };
        p.push_back(p0);
    }
Вот что делает код в выделенных строках?
В одном случае параметры вектора инициализируются, а потом изменяются в void timer(int = 0).
Вот надо и посмотреть, для небольшого числа шариков, как выполнилась инициализация (какие числа получились) и как они были изменены.
Если все начальные параметры совпадают при инициализации, то как работает rand()?
Если тут всё нормально, то как работает процедура изменения параметров?
Почему ваши частицы, как вы пишете:
Цитата:
Молекулы постоянно летят из правого нижнего угла окна в левый верхний.
Смотрите код пошагово. Разберитесь с каждой операцией.
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 01.12.2021, 17:18   #13
wqerty11
Пользователь
 
Регистрация: 24.11.2021
Сообщений: 24
По умолчанию

ViktorR, Здравствуйте. Попытался разобраться в коде, и выяснил, что проблема в выделенных значениях. Чем они больше, тем хуже летят молекулы. Например, если значение 10, то всё вроде в порядке. В чем может быть проблема?

Код:
P p0 = { rand() % 480, rand() % 480, rand() % 100000 / 500.0 - 100, rand() % 100000 / 500.0 - 100, 1 };
wqerty11 вне форума Ответить с цитированием
Старый 01.12.2021, 17:42   #14
wqerty11
Пользователь
 
Регистрация: 24.11.2021
Сообщений: 24
По умолчанию

wqerty11, Короче, проблема 100% в этой строке, осталось понять как её исправить.
wqerty11 вне форума Ответить с цитированием
Старый 01.12.2021, 17:59   #15
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,306
По умолчанию

Вы написали, что у вас
Цитата:
Значение RAND_MAX=32767
rand() % 100000 - это, как я понял из описания, генерация с масштабирующим множителем.
В этом случае формируется случайное число в интервале от 0 до 100000.
У меня нет возможности это проверять какие числа генерируются, а вы не желаете сделать вывод характеристик нескольких векторов.
В чём затруднение? Почему нельзя сделать вывод характеристик?
Ведь код можно поправить и написать так:
Код:
for (int i = 0; i < 5; ++i)   // только для пяти точек
    {
      Xc = rand() % 480;
      Yc = rand() % 480;
      Vx =  rand() % 100000 / 500.0 - 100;
      Vy =  rand() % 100000 / 500.0 - 100;
      <тут сделать вывод на экран этих параметров>

        P p0 = { Xc, Yc, Vx, Vy, 1 };
        p.push_back(p0);
    }
Сделайте вывод, посмотрите на него, и поймите, почему так работает.
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 01.12.2021, 18:33   #16
wqerty11
Пользователь
 
Регистрация: 24.11.2021
Сообщений: 24
По умолчанию

ViktorR, Вот что получилось:
Изображения
Тип файла: png Screenshot_38.png (8.7 Кб, 19 просмотров)
wqerty11 вне форума Ответить с цитированием
Старый 01.12.2021, 19:06   #17
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,306
По умолчанию

Т.е., все проекции скоростей отрицательные. Это значит, что частицы двигаются влево и вверх.
rand() % 100000 / 500.0 - всегда меньше 100, которую отнимаем.
Разберитесь с генератором случайных чисел.
rand() % 100000 - это какой диапазон генерируемых чисел?

Какой диапазон скоростей мог бы быть в вашей модели?
Возможно, что можно делить не на 500.0, а 50.0.
Вот нашёл, например:
генерация в диапазоне [a, b):
Код:
x = a + rand()%(b-a)  // Правая граница открытая: меньше b
генерация в диапазоне [a, b]:
Код:
x = a + rand()%(b-a+1)  // Правая граница закрытая: меньше или равно (не больше) b
Прими для себя некоторые значения для a и b (например, -20, 20) и проверь.

PS: Не стесняйся, заменяй предложенные в видео варианты на свои.
Экспериментируй. Не факт, что автор видео крутой и кудрявый.
Возможно, что он что-то своё двигал (ну так на тот момент сложилось).
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 01.12.2021, 22:18   #18
wqerty11
Пользователь
 
Регистрация: 24.11.2021
Сообщений: 24
По умолчанию

ViktorR, У автора видео в компиляторе RAND_MAX = 2147483647, а у меня 32767. Думаю проблема в этом.
wqerty11 вне форума Ответить с цитированием
Старый 01.12.2021, 22:48   #19
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,306
По умолчанию

Не заморачивайся этим видео. Пробуй свои варианты. Осваивайся.
Там не всё так тривиально, поскольку в выражении rand() % 100000
100000 - это масштабирующий коэффициент.
Т.е., если я правильно понял, то генерируются числа в диапазоне от 0 до 100000 в независимости от
значения RAND_MAX.
После деления на 500.0 получаем диапазон от 0 до 200.
Вычитая 100 должны получить распределение от -100 до 100.
Пишем выражение:
Код:
x = -100 + rand()%(200 + 1)
и пробуем.
Т.е., выражение (целиком):
Код:
Vx =  rand() % 100000 / 500.0 - 100;
заменяем на то, что написано выше.
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 02.12.2021, 11:36   #20
wqerty11
Пользователь
 
Регистрация: 24.11.2021
Сообщений: 24
По умолчанию

ViktorR, Движение частичек вроде наладилось, но их скорость теперь достаточно низкая.
Изображения
Тип файла: png Screenshot_39.png (6.8 Кб, 12 просмотров)
wqerty11 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 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