Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
1 / 1 / 0
Регистрация: 25.09.2013
Сообщений: 181

Создать 2 класса: Рой частиц и частица: ParticleSwarm и Particle

09.03.2014, 21:25. Показов 1947. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужно создать 2 класса: Рой частиц и частица: ParticleSwarm и Particle.
Эти 2 класса взаимосвязаны.
В ParticleSwarm есть поле, которое отражает наилучший результат, которые достигли частицы за всё своё время существования и поле, которое хранит наилучший результат, который достиг рой частиц за текущую итерацию. Соответственно есть 2 функции, которые определяют лучший результат за текущую итерацию и лучший результат за всё время существования роя.
У частиц тоже есть свои поля и функции, например, которые заставляют частицу двигаться.
Вопрос заключается вот в чём. Как бы рациональнее организовать. Я полагаю так: Отдельно создать класс PArticleSwarm, а при создании каждой частицы в Public-полях прописать объект класса PArticleSwarm, чтобы каждая частица была превязана к классу PArticleSwarm.Всё это, конечно, будет работать, но мне кажется, что это как-то криво и нерационально придумано. Может дадите совет, как бы вы всё организовали?
P.S. я реализую алгоритм роя частиц.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.03.2014, 21:25
Ответы с готовыми решениями:

Particle System как сделать отскок частиц от коллайдера 2D
Всем привет! Частицы проходят сквозь коллайдер 2D Не могу найти настройку в Particle System, где выставить отражение частиц от...

Дана строка S. Создать новую строку, состоящую из символов S, у кото- рой к каждому пробелу добавлено два пробела
Дана строка S. Создать новую строку, состоящую из символов S, у кото- рой к каждому пробелу добавлено два пробела

Определить степень поражения атакующих частиц (в долях от общего числа частиц)
Добрый. Помогите решить задачу в Mathcad. Выдает ошибку при определении переменной, и не могу построить график. Заранее благодарен. ...

7
 Аватар для Евгений В
912 / 672 / 134
Регистрация: 01.03.2010
Сообщений: 1,279
10.03.2014, 00:04
Лучший ответ Сообщение было отмечено Dimarik_1 как решение

Решение

Dimarik_1,

Так, может?
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    class ParticleSwarm
    {
        List <Particle>  listParticle = new List<Particle>();
              
        public void AddParticle(int count)
        {
            for (int i = 1; i <= count; i++)
            {
                listParticle.Add(new Particle());
            }           
        }
    }
 
 
    class Particle
    {
 
 
    }
1
1 / 1 / 0
Регистрация: 25.09.2013
Сообщений: 181
10.03.2014, 11:35  [ТС]
отличная идея. Спасиюл

Добавлено через 35 минут
Ещё такой вопрос. А если у класса ParticleSwarm есть поля public, единые для всех частиц, например, максимальное и минимальное значение аргументов. А с этими полями надо будет работать внутри класса Particle. Самым простым способом является объявить такие поля в Particle. Но это неоптимально. В результате будут записываться лишние данные и израсходована лишняя память, без чего можно обойтись. Как бы это было правильнее сделать?
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
10.03.2014, 12:01
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
class ParticleSwarm
    {
        List <Particle>  listParticle = new List<Particle>();
        Particle max, min;
     
        public void AddParticle(int count)
        {
            for (int i = 1; i <= count; i++)
            {
                listParticle.Add(new Particle());
            }           
        }
    }
0
1 / 1 / 0
Регистрация: 25.09.2013
Сообщений: 181
10.03.2014, 12:10  [ТС]
Я хочу в классе Particle прописать методы, которые будут передвигать частицу. Но для этого мне внетри этих методов надо знать, какое максимальное и минимальное значение может принимать частица. Создавать отдельно поля для каждой частицы Max и Min я не хочу, потому что они уже созданы в класса ParticleSwarm и для каждой частицы они будут такими же. Зачем засорять память?
Как мне в методах внутри класса PArticle обратиться к полям класса ParticleSwarm?

Добавлено через 29 секунд
MAx и Min - поля типа double
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
10.03.2014, 12:57
Dimarik_1, в крайнем случае сделай статические поля в классе Particle.
0
 Аватар для Евгений В
912 / 672 / 134
Регистрация: 01.03.2010
Сообщений: 1,279
10.03.2014, 20:57
Лучший ответ Сообщение было отмечено Dimarik_1 как решение

Решение

Цитата Сообщение от Dimarik_1 Посмотреть сообщение
Как мне в методах внутри класса PArticle обратиться к полям класса ParticleSwarm?
Думаю, что не стоит так тесно сцеплять классы друг с другом.
Нужно в классе Particle создать отдельные поля (или свойства) для Мах и Min. Что, в общем -то логично. Объект типа Particle должен содержать характерный для него функционал и характерные для него свойства. Значения Мах и Min к ним относятся.
Если в объекте Particle Мах и Min используются в расчетах однократно, то передайте их из class ParticleSwarm нужным методом в качестве аргументов (если это публичный метод)

А class ParticleSwarm пусть занимается своим делом - инициирует создание частицы и работает с ней, как с самостоятельным объектом, а не хранит единолично чужие поля.
Позже, вы сможете выкинуть(переделать) class ParticleSwarm, но поведение объекта Particle от этого не пострадает. class ParticleSwarm будет подстраиваться под Particle, а не наоборот.

На то он и ООП, что бы создавать самостоятельные объекты и налаживать взаимодействие между ними.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class ParticleSwarm
    {        
        List <Particle>  listParticle = new List<Particle>();
                
        Particle particle;
        public void AddParticle(int count)
        {
            for (int i = 1; i <= count; i++)
            {
                particle = new Particle();
                particle.Min = 0.000001;// можно было бы max/min   и через конструктор передать, но практичнее все таки свойства. Работа так нагляднее.
                particle.Max = 0.0001;
                listParticle.Add(particle);
            }           
        }
    }
 
 
    class Particle
    {
       public double Min{get; set;}
       public double Max { get; set; }
    }
1
 Аватар для nio
6050 / 3460 / 336
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
10.03.2014, 21:22
Цитата Сообщение от Dimarik_1 Посмотреть сообщение
Создавать отдельно поля для каждой частицы Max и Min
а придется, иначе получишь неверную модель. Потому что размер частицы - это размер именно частицы, и он не зависит от того находится частица в куче или сама по себе. Единственное, что ты можешь сделать, это при добавлении новой частицы в рой инициализировать мин и макс частицы константными значениями именно этого роя.

Добавлено через 1 минуту

Не по теме:

долго пишу :umnik:

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.03.2014, 21:22
Помогаю со студенческими работами здесь

Найти суммарный импульс частиц и значение суммарных моментов импульса частиц относительно двух точек.
савельев 1,121 Две частицы движутся равномерно в противоположных направлениях вдоль параллельных траекторий, расстояние между которыми...

Создать анимацию движения частиц друг относительно друга
Всем добрый вечер! Помогите, пожалуйста, в решении такой задачи: Есть несколько частиц, незаряженных, обладающих одинаковой массой,...

Создать диаграмму, которая бы показывала удаление частиц от начальной точки
Помогите пожалуйста, вот попросил преподаватель смоделировать случайное блуждание для одной и многих частиц, с этим я успешно справился,...

Стая, рой и.т.п
Здравствуйте Нужно получить как на картинке - летит стая птиц (или др особей). Формально - для каждой найти (или подобрать) подходящую...

Закрытие 2-рой Формы
Здравствуйте. У меня есть 2 формы: Form1 и Form2 Как мне сделать так чтобы при открытии Form2 закрывалась Form1? Если использовать ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это дополнительная запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru