Здравствуйте, гость ( Вход | Регистрация )
|
Petr0vi4 |
14.7.2009, 13:27
Сообщение
#1
|
|
Студент ![]() Группа: Новичок Сообщений: 11 Регистрация: 14.7.2009 Пользователь №: 907 Спасибо сказали: 0 раз(а) Репутация: 0
|
Пишу программу для симуляции движения частиц идеального газа в сосуде. У меня есть 4 стенки сосуда (QGraphicsRectItem) и 100 QGraphicsEllipsItem шариков размером 5*5 (типа молекулы).
Каждой молекуле на этапе создание присваивается вектор в виде координат 2х точек, а перемещение происходит по событию таймера вдоль этого вектора. Мне необходимо обработать столкновение между молекулами и стенами. Я все это реализовал, но дело в том, что все это жутко тормозит Код обнаружения столкновений: Таймер срабатывает с интервалом в 10 мс. AllObjects - массив элементов класса Control. Control - класс наследник QObject, в нем есть QGraphicsEllipsItem* Item (сама молекула) + переменные типа qreal для вектора движения. Код в событии таймера: Получается за 1 событие таймера я 2 раза выполняю цикл по всем объектам. Класс для молекулы выбран с рассчетом на то, что в нем уже прописана обработка столкновений. При количестве шариков 20-30 все работает идеально, при 50-100 уже тормозит Можно ли как то ускорить обработку? Может кто-нибудь предложит какое-то альтернативное решение.
Причина редактирования: используй тэг code
|
|
|
|
![]() |
|
Petr0vi4 |
17.7.2009, 18:59
Сообщение
#2
|
|
Студент ![]() Группа: Новичок Сообщений: 11 Регистрация: 14.7.2009 Пользователь №: 907 Спасибо сказали: 0 раз(а) Репутация: 0
|
Litkevich Yuriy, принцип соударения заключается в обмене векторами движения. Если 2 шара сталкнутся все работает на ура, а если 3 одновременно - тогда не знаю
|
|
|
|
Petr0vi4 Оптимизация отрисовки QGraphicsEllipseItem 14.7.2009, 13:27
Litkevich Yuriy Цитата(Petr0vi4 @ 14.7.2009, 17:27) Тайме... 14.7.2009, 14:00
Petr0vi4 Цитата(Litkevich Yuriy @ 14.7.2009, 22:00... 14.7.2009, 14:30
SABROG Цитата(Petr0vi4 @ 14.7.2009, 15:30) Цитат... 14.7.2009, 14:53
Petr0vi4 На 50 мс слишком медленно движутся почему-то Увел... 14.7.2009, 15:17
Litkevich Yuriy Ну, что я могу сказать?
Взял пример examples... 14.7.2009, 17:24
SABROG Возможно есть смысл сделать кэш. Например просчита... 14.7.2009, 17:27
Kagami Все дело в процедуре обнаружения столкновений. Это... 14.7.2009, 17:30
Litkevich Yuriy Вообще на мой взгляд пример "сталкивающиеся м... 14.7.2009, 17:57
Petr0vi4 ЦитатаKagami
Здесь другая сторона медали - мне при... 14.7.2009, 18:13
Kagami Я не совсем это имел в виду. Тебе надо переопредел... 14.7.2009, 18:17
Litkevich Yuriy Petr0vi4, щёлкай по имени автора поста, вместо цит... 14.7.2009, 19:25
Petr0vi4 Kagami, пришлось перелопатить все программу. Сдела... 15.7.2009, 6:26
Kagami Посмотри в документации по QGraphicsItem::UserType... 15.7.2009, 17:34
Petr0vi4 Что-то плохо все работает, может все-таки решить п... 16.7.2009, 15:29
Kagami Может выложишь исходники программы? Если она, коне... 16.7.2009, 16:02
Petr0vi4 Да, конечно, вот проект. 16.7.2009, 16:28
Kagami Мда.. в коде пока особо не копался, но нашел одно ... 16.7.2009, 22:07
Petr0vi4 Ну вообще-то это и есть правильно, но медленно. 17.7.2009, 2:18
Kagami После исправлений у меня стало работать со 100 эле... 17.7.2009, 7:25
Litkevich Yuriy Слушайте у меня шарик улител за пределы стены и у ... 17.7.2009, 8:20
Petr0vi4 Спасибо, действительно работает лучше! Я думаю... 17.7.2009, 8:31
Kagami На ста шариках такие "побеги" случаются ... 17.7.2009, 11:36
Litkevich Yuriy Petr0vi4, и ещё есть явный недочёт в вычислении со... 17.7.2009, 16:29
Kagami Эх.. Видимо надо вспоминать школьную физику, а име... 17.7.2009, 20:26
Petr0vi4 Цитата(Kagami @ 18.7.2009, 3:26) угол пад... 18.7.2009, 2:59
Kagami Цитата(Petr0vi4 @ 18.7.2009, 3:59) При аб... 18.7.2009, 8:46
Litkevich Yuriy Цитата(Kagami @ 18.7.2009, 12:46) Теперь ... 18.7.2009, 12:00![]() ![]() ![]() |
|
Текстовая версия | Сейчас: 17.12.2025, 15:02 |