crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> Оптимизация отрисовки QGraphicsEllipseItem
Petr0vi4
  опции профиля:
сообщение 14.7.2009, 13:27
Сообщение #1


Студент
*

Группа: Новичок
Сообщений: 11
Регистрация: 14.7.2009
Пользователь №: 907

Спасибо сказали: 0 раз(а)




Репутация:   0  


Пишу программу для симуляции движения частиц идеального газа в сосуде. У меня есть 4 стенки сосуда (QGraphicsRectItem) и 100 QGraphicsEllipsItem шариков размером 5*5 (типа молекулы).
Каждой молекуле на этапе создание присваивается вектор в виде координат 2х точек, а перемещение происходит по событию таймера вдоль этого вектора. Мне необходимо обработать столкновение между молекулами и стенами. Я все это реализовал, но дело в том, что все это жутко тормозит :(

Код обнаружения столкновений:
for(int i=0;i<Item->collidingItems().count();i++)
    {
        if(Item->collidingItems().at(i)->type() == 4) // столкновение с другой молекулой
        {
            // записываем новый вектор движения в буффер
        }
        else
        {
            if(Item->collidingItems().at(i)->type() == 3) // столкновение со стеной
            {
                // записываем новый вектор движения в буффер
            }
        }
    }

Таймер срабатывает с интервалом в 10 мс.
AllObjects - массив элементов класса Control.
Control - класс наследник QObject, в нем есть QGraphicsEllipsItem* Item (сама молекула) + переменные типа qreal для вектора движения.
Код в событии таймера:
for(int i=0;i<ObjNum;i++) // цикл по всем объектам
    AllObjects[i]->BallCollision(); //обрабатываем столкновения

// применяем координаты и двигаем шары
for(int i=0;i<ObjNum;i++)
{
    if(AllObjects[i]->Changed) // проверяем изменились ли координаты
    {
       AllObjects[i]->ReadFromBuffer(); // пишем из буфера в "рабочий" вектор
    }
    AllObjects[i]->MoveBall();//двигаем
}

Получается за 1 событие таймера я 2 раза выполняю цикл по всем объектам.
Класс для молекулы выбран с рассчетом на то, что в нем уже прописана обработка столкновений.
При количестве шариков 20-30 все работает идеально, при 50-100 уже тормозит :(
Можно ли как то ускорить обработку? Может кто-нибудь предложит какое-то альтернативное решение.
Причина редактирования: используй тэг code
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме
- 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
- - Petr0vi4   Litkevich Yuriy, принцип соударения заключается в ...   17.7.2009, 18:59
- - 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


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 20.4.2024, 19:12