Форум программистов, компьютерный форум, киберфорум
Алгоритмы
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
1970 / 826 / 115
Регистрация: 01.10.2012
Сообщений: 4,962
Записей в блоге: 2

Стая, рой и.т.п

20.10.2015, 12:33. Показов 2270. Ответов 28
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте

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

- создавать любое разумное кол-во птичек (напр 10K не вопрос)
- расставлять их с умом, не слишком близко, но и не слишком далеко друг от друга
- знаем заданную траекторию движения всей стаи

Так, ну и как двигать каждую птичку?

С уважением
Игорь

Добавлено через 7 минут
Пардон, вот картинка
Миниатюры
Стая, рой и.т.п  
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.10.2015, 12:33
Ответы с готовыми решениями:

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

Рой тормозов зашкаливает. HDD
Давно начал тормозить комп. прям работает работает, но при запуске чего-нибудь нового бац и в тупняк на 10 сек. Винду естественно снести...

Создать 2 класса: Рой частиц и частица: ParticleSwarm и Particle
Нужно создать 2 класса: Рой частиц и частица: ParticleSwarm и Particle. Эти 2 класса взаимосвязаны. В ParticleSwarm есть поле, которое...

28
Антикодер
Эксперт функциональных языков программирования
1888 / 870 / 48
Регистрация: 15.09.2012
Сообщений: 3,088
21.10.2015, 02:53
фракталы какие нибудь использовать
0
 Аватар для IrineK
2023 / 1641 / 425
Регистрация: 23.02.2011
Сообщений: 6,002
Записей в блоге: 25
21.10.2015, 07:35
Swarm Algorithms
Swarm intelligence
0
1970 / 826 / 115
Регистрация: 01.10.2012
Сообщений: 4,962
Записей в блоге: 2
21.10.2015, 14:35  [ТС]
Цитата Сообщение от IrineK Посмотреть сообщение
Swarm Algorithms
Swarm intelligence
С этим конечно ознакомился (картинка оттуда). Там много интересного, но нигде не звучит что "траектория всей стаи задана" - а это принципиально.

Добавлю что просто "проецировать" путь стаи для каждой птички явно не годится. Хотелось бы примерно так:
- есть "лидер", он летит как хочет (т.е. по заданному юзером пути)
- а остальные как бы "следуют за вожаком", не отрываясь от стаи но и не сталкиваясь между собой

Но это пока лишь "хотелка"

Добавлено через 6 часов 19 минут
Вот нашел книжку https://www.safaribooksonline.... /ch04.html. Хотелось бы конечно лирики поменьше, а тех деталей побольше - но в целом очень толково. Идея была предложена Рейнольдсом лет 30 назад. Смысл простой - осредняться по "видимым" соседям (часто по направлению скорости) плюс поддерживать расстояния между птичками. Техника обычная - управляем вектором скорости. Упрощенно: в стае каждый действует по правилу "лечу как все". Наметилось 2 проблемы:

1) Все-таки как "следовать за лидером"? Ясно что лидер действует в каком-то радиусе, причем относительно небольшом. Допустим мы подтянули к лидеру тех кто в этот радиус попал. Но осреднение и соблюдение нужных расстояний потянет птичек назад - и так расстояние до лидера будет расти с каждым шагом

2) Все достаточно хорошо (и просто) если стая уже сформирована, но что если нет? Вообще что делать если "ближайших видимых" мало (недостаточно) или вообще пока нет?
Но одна малэнькая, но упорная птычка сказала: я лично полечу прямо на солнце
Ну а куда ей лететь?
0
 Аватар для IrineK
2023 / 1641 / 425
Регистрация: 23.02.2011
Сообщений: 6,002
Записей в блоге: 25
21.10.2015, 15:42
Цитата Сообщение от Igor3D Посмотреть сообщение
Все достаточно хорошо (и просто) если стая уже сформирована, но что если нет?
Понаблюдайте за живыми птицами.
Сначала - слёт, потом - полёт.

Цитата Сообщение от Igor3D Посмотреть сообщение
Но осреднение и соблюдение нужных расстояний потянет птичек назад
Почему назад?
0
1970 / 826 / 115
Регистрация: 01.10.2012
Сообщений: 4,962
Записей в блоге: 2
21.10.2015, 16:58  [ТС]
Цитата Сообщение от IrineK Посмотреть сообщение
Сначала - слёт, потом - полёт.
Так вот и неясно как действовать на взлете, когда стая еще не сформировалась. Лидер есть, но он далеко. Получается или они собьются в стайки без лидера, или вообще полетят "сами по себе", в обоих случаях без всякого пути, просто в направлении взлета.

Цитата Сообщение от IrineK Посмотреть сообщение
Почему назад?
Так сработает осреднение и балансировка расстояния

Не по теме:

Цитата Сообщение от IrineK Посмотреть сообщение
Понаблюдайте
Ага, сразу включается "повелительное наклонение":)

0
Модератор
Эксперт функциональных языков программирования
3136 / 2283 / 469
Регистрация: 26.03.2015
Сообщений: 8,886
21.10.2015, 17:13
Цитата Сообщение от Igor3D Посмотреть сообщение
осредняться по "видимым" соседям
а если осредняться только по тем соседям, которые ближе к лидеру?

Добавлено через 1 минуту
Цитата Сообщение от Igor3D Посмотреть сообщение
неясно как действовать на взлете, когда стая еще не сформировалась
точно так же, как и в полёте
0
 Аватар для IrineK
2023 / 1641 / 425
Регистрация: 23.02.2011
Сообщений: 6,002
Записей в блоге: 25
21.10.2015, 18:45

Не по теме:

Цитата Сообщение от Igor3D Посмотреть сообщение
Ага, сразу включается "повелительное наклонение"
Закон стаи.
А так - можно и самому летать. По собственной траектории.



Перед полетом стая долго кружит вокруг лидера - собирается. И только потом - летит.
Понаблюдайте. Там - миллиарды лет эволюции.
0
1970 / 826 / 115
Регистрация: 01.10.2012
Сообщений: 4,962
Записей в блоге: 2
22.10.2015, 08:20  [ТС]
Цитата Сообщение от Shamil1 Посмотреть сообщение
а если осредняться только по тем соседям, которые ближе к лидеру?
Простейший (но непригодный) вариант: "все просто летят за лидером". Тогда никакой заданной траектории не получается, т.к. все тупо летят к нему по прямой. Поэтому естественно ограничить зону видимости лидера в расчете на то что он увлечет ближайших, а остальные последуют за ними.

Цитата Сообщение от Shamil1 Посмотреть сообщение
точно так же, как и в полёте
Так не выходит, т.к. еще "никто ни за кем не следует".

Цитата Сообщение от IrineK Посмотреть сообщение
Перед полетом стая долго кружит вокруг лидера - собирается. И только потом - летит.
Мои наблюдения ограничиваются неск десятками голубей, которые сидели на крыше соседнего дома (уже нет как пошла стрельба). Никто там не собирался, снялись и полетели наматывать круги. Вот когда собираются большие стаи ворон - да. Ну а почему бы это не решить остановкой лидера? Ведь заданный путь (траектория) расписан по времени. В общем, это (возможно) под-задача
0
Модератор
Эксперт функциональных языков программирования
3136 / 2283 / 469
Регистрация: 26.03.2015
Сообщений: 8,886
22.10.2015, 09:40
Цитата Сообщение от Igor3D Посмотреть сообщение
Простейший (но непригодный) вариант: "все просто летят за лидером". Тогда никакой заданной траектории не получается, т.к. все тупо летят к нему по прямой.
Почему все "тупо летят к нему", если я предлагал "лететь с такой же скоростью" (то есть, в том же направлении)?

Лидер летит туда, куда хочет.
Те, кто его видит, летят параллельным курсом (тот же вектор скорости)... с небольшими поправками для избежания столкновений.
Те, кто его не видит, летят со скоростью тех, кто находится ближе к лидеру (усредняем вектор)... с небольшими поправками для избежания столкновений.
0
1970 / 826 / 115
Регистрация: 01.10.2012
Сообщений: 4,962
Записей в блоге: 2
22.10.2015, 10:23  [ТС]
Цитата Сообщение от Shamil1 Посмотреть сообщение
Почему все "тупо летят к нему", если я предлагал "лететь с такой же скоростью" (то есть, в том же направлении)?
Лидер летит туда, куда хочет.
Те, кто его видит, летят параллельным курсом (тот же вектор скорости)... с небольшими поправками для избежания столкновений.
Те, кто его не видит, летят со скоростью тех, кто находится ближе к лидеру (усредняем вектор)... с небольшими поправками для избежания столкновений.
Копирование/осреднение вектора скорости работает хорошо только если стая уже сформирована. У Вас я не вижу силы которая заставляет сбиваться в стаю, т.е. ничто не пресекает слишком большое расстояние между птичками
0
Модератор
Эксперт функциональных языков программирования
3136 / 2283 / 469
Регистрация: 26.03.2015
Сообщений: 8,886
22.10.2015, 10:42
На картинке стая уже сформирована....
Тогда какое у нас начальное состояние, если стаю надо формировать?
0
1970 / 826 / 115
Регистрация: 01.10.2012
Сообщений: 4,962
Записей в блоге: 2
22.10.2015, 11:49  [ТС]
Цитата Сообщение от Shamil1 Посмотреть сообщение
На картинке стая уже сформирована....
Тогда какое у нас начальное состояние, если стаю надо формировать?
Пользователь задает поверхность, напр какую-то "поляну". Задает птичку-образец (3D объект) который нужно размножить по поверхности с какими-то вариациями, и число копий. В рез-те напр 1000 птичек расположено на поляне. Или он может задать им начальные скорости - они полетят "как есть", стаи пока нет. Для управления есть специальные объекты "силы" которыми можно управлять в анимации (напр менять амплитуду во времени). Сила действует по Ньютону - доливает ускорение. Цель - создать силу (или неск сил) управляя которыми юзер получит поведение стаи. Силы знают на что они воздействуют и имеют свои данные (напр заданную траекторию).
0
Модератор
Эксперт функциональных языков программирования
3136 / 2283 / 469
Регистрация: 26.03.2015
Сообщений: 8,886
22.10.2015, 14:41
Тогда нужно ещё знать, какой формы стаю/рой (по каким правилам) мы хотим сформировать.

Примеры понятных мне конфигураций: пчелиный рой, хвост кометы, птичий клин.
Про конфигурацию на картинке у меня нет идей, по каким правилам она сформирована. Но, конечно, можно подогнать при желании. Но неужели нужно, чтобы птицы делились на два "рукава"?
0
 Аватар для IrineK
2023 / 1641 / 425
Регистрация: 23.02.2011
Сообщений: 6,002
Записей в блоге: 25
23.10.2015, 00:05
Цитата Сообщение от Shamil1 Посмотреть сообщение
Но неужели нужно, чтобы птицы делились на два "рукава"?
Например, журавли летят клином - т.е. в "два рукава".
Гуси-лебеди - туда же.

Цитата Сообщение от Igor3D Посмотреть сообщение
1000 птичек расположено на поляне
Чего-то сильно много.
Тогда кроме лидера - "полкана", должны быть еще и ротные.
Пример- структура ВС. Она не случайна, а обусловлена возможностями коммуникации.
Птички же у вас не телепаты. Их коммуникация ограничена. Значит, и управление может быть эффективным только в ограниченной группе.
0
Модератор
Эксперт функциональных языков программирования
3136 / 2283 / 469
Регистрация: 26.03.2015
Сообщений: 8,886
23.10.2015, 01:15
Цитата Сообщение от IrineK Посмотреть сообщение
Например, журавли летят клином - т.е. в "два рукава".
Клин - это совсем другое (и я упомянул его в своём сообщении). Они летят так, что ни одна птица не летит перед другой (каждая на своей линии).
0
1970 / 826 / 115
Регистрация: 01.10.2012
Сообщений: 4,962
Записей в блоге: 2
23.10.2015, 09:12  [ТС]
Цитата Сообщение от Shamil1 Посмотреть сообщение
Но неужели нужно, чтобы птицы делились на два "рукава"?
Ну это как раз решаемо: 2 лидера, летели вместе, потом разошлись

Цитата Сообщение от Shamil1 Посмотреть сообщение
Тогда нужно ещё знать, какой формы стаю/рой (по каким правилам) мы хотим сформировать.
Примеры понятных мне конфигураций: пчелиный рой, хвост кометы, птичий клин.
Такая конкретизация мне кажется излишней. Нужно дать пользователю такой механизм управляя которым (задавая разные значения) он бы сам получал разнообразные вариации, включая и перечисленные Вами.

По книжке: у каждой птички есть "зона видимости" ограниченная углом по направлению текущей скорости. Т.е. каждый равняется на "летящих впереди меня". Собственно это и есть сила сбивающая в стаю. Ну само собой наезжать на соседей нельзя, есть еще сила отталкивания - мощная но с малой зоной действия.

Так, но что делать если впереди никого нет? Думаю тут один выход - лететь на лидера, причем с бОльшей скоростью чем он (иначе его не догнать). Тогда рано или поздно передние найдутся. Нужно построить плавный переход между этими 2 поведениями. И еще тут пробой: что делать если направление на лидера перепендикулярно текущей скорости (или образует с ним достаточно большой угол)? Какое-то "движение поперек" выходит...
0
Модератор
Эксперт функциональных языков программирования
3136 / 2283 / 469
Регистрация: 26.03.2015
Сообщений: 8,886
23.10.2015, 09:40
Цитата Сообщение от Igor3D Посмотреть сообщение
Ну это как раз решаемо: 2 лидера, летели вместе, потом разошлись
на картинке наоборот - рукава сходятся, а не расходятся

Цитата Сообщение от Igor3D Посмотреть сообщение
Нужно дать пользователю такой механизм управляя которым (задавая разные значения) он бы сам получал разнообразные вариации, включая и перечисленные Вами.
Каждая птичка формирует поле. Поле зависит от расстояния. Зависимость имеет вид "ломаной линии" с одной вершиной (прямая с одной точкой перелома). Можно попробовать две вершины, но, думаю, хватит и одной.
На каждую птицу действует поле других птиц с неким коэффициентом. Например, коэффициент может быть больше для тех птиц, которые начали движение раньше неё. Тут, видимо, потребуется поэкспериментировать.
0
1970 / 826 / 115
Регистрация: 01.10.2012
Сообщений: 4,962
Записей в блоге: 2
23.10.2015, 09:58  [ТС]
Цитата Сообщение от Shamil1 Посмотреть сообщение
на картинке наоборот - рукава сходятся, а не расходятся
Значит сначала лидеры летели порознь, потом вместе Ну до мульти-лидеров еще далеко

Все думаю что делать если летят "в строю с лидером". Может так: гасить силу "лечу на лидера" по косинусу угла (скорость - напр-е на лидера). Тогда птички или опередят лидера или отстанут - в любом случае косинус вырастет. Вообще ситуация когда лидер "завис" возможна
0
Модератор
Эксперт функциональных языков программирования
3136 / 2283 / 469
Регистрация: 26.03.2015
Сообщений: 8,886
23.10.2015, 12:21
Сила притяжения к лидеру гасится силой отталкивания от других птиц (включая лидера).
Зависимость силы притяжения от расстояния выглядит так:
- при каком-то значении = ноль
- при меньших значениях быстро растёт в минус (отталкивание) = прямая с большим углом наклона
- при больших значениях растёт в плюс (притяжение) = прямая с небольшим углом наклона
(выше я назвал такую зависимость "ломаной линией с одной вершиной")
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.10.2015, 12:21
Помогаю со студенческими работами здесь

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

"Стая светлячков"
Стая светлячков. В центре рисунка расположена «Лампа» - относительно большой круг белого цвета, либо изображение лампы. Вокруг лампы роятся...

В матрице макс.элемент заменить средним арифм. элементов строки, в к-рой находится макс.элемент
Здравствуйте! Помогите пожалуйста с решением такой задачи: В матрице D максимальный элемент заменить средним арифметическим элементов...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере нетипового документа выдачи шин для спецтехники с табличной частью, разработанного в конфигурации КА2. Данные берутся из. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru