Создание простой системы частиц

У меня был вопрос относительно того, как я проектирую свою систему частиц.

Прямо сейчас у меня есть класс P, в котором хранится вся информация о частице, такая как скорость, положение, направление, тип и т. Д. У меня также есть основной файл, в котором я буду рисовать эти частицы, обновлять и создавать их экземпляры. Я хочу создать список этих частиц, используя библиотеку c ++ std list, поэтому изначально я сделал

std::list<P> listOfParticles;

в основном файле. Здесь проблема. Делая это, я по существу буду вынужден сделать свои функции обновления и отрисовки в основном файле. Я чувствую, что это плохая практика, и что все, что связано с частицей, должно храниться в одном классе, но я не уверен, куда идти дальше с точки зрения наилучшей практики. Было бы хорошей идеей просто создать список частиц в классе P, где я определяю, что такое частица? Я чувствую, что это не умная идея, хотя ..
Если бы кто-то мог направить меня в правильном направлении, я был бы очень признателен.

-1

Решение

«Делая это, я по сути буду вынужден делать свои функции обновления и рисования в главном файле»

Никто не мешает вам помещать объявления / определения членов класса в одни и те же / разные файлы .h / .cpp.

РЕДАКТИРОВАТЬ:-

Это то, что я сказал, лучше было бы, если бы вы сделали это List член какого-то другого класса, куда вы бы поместили все функции для управления этим списком.

0

Другие решения

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

Класс, который представляет отдельные частицы (P), может быть вложен в (C), если нет необходимости видеть его снаружи. Он будет инкапсулировать данные частиц и, возможно, также моделировать парное взаимодействие с другой частицей и другие одночастичные операции.

0

По вопросам рекламы [email protected]