![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Перетекание массы в массиве [Delphi, C++ Builder, Windows]
Septic © (2004-12-17 05:47:00)Нужен алгоритм реализующий перетекание массы в массиве. Дан массив в котором находятся капли, обладающие некоторой массой, большие капли притягивают мальенькие и сливаются с ними, и так до тех пор пока не останется одна капля. Массив 2-мерный. Капли могут иметь массу 0.
П7 (2004-12-23 12:11:00) [1]Здесь можешь взять p7_gfxvector.pas и самостоятельно под С++ переделать.
http://animka.com/stuff/p7_gfxvector.pas
Septic (2004-12-23 05:10:00) [2]А где взять p7_gfxvector.h? Мне для Builder надо.
П7 (2004-12-22 14:32:00) [3]Про массив вроде уже всё объяснили, всё должно быть ясно. Да и неинтересно мне было в массиве считать. Поэтому накромсал тут маленькую демку. Поганенько, правда, никакой тебе физики. Но функцию свою выполняет: 100 капель сливаются в одну (:
http://animka.com/stuff/dropsalg.rar
П7 (2004-12-22 13:20:00) [4]Тогда возникает вопрос, с какой капли начинать "движение к слиянию", чтобы это реалистично смотрелось... (:
Septic (2004-12-22 03:20:00) [5]Я тут сам кое-что придумал.
1. Осмотреть ячейки вокруг капли A на расстоянии L(первоначально L=1).
2.Если во всех ячейках 0, то L=L+1 и перейти к п.1.
3. Выбираем самую большую каплю из просмотренных ячеек, если она больше капли A, то перемещаем каплю A в ее сторону на 1 ячейку.
Septic (2004-12-21 16:54:00) [6]Вот формулирвка задания, которое мне нужно: Имитация перетекания массы в массиве – меньшая капля перетекает в ближайшую большую и т.д. Маленькие капли большие не притягивают. Нет тут гравитации.
йцукеук (2004-12-19 14:58:00) [7]Добавь силу трения пропорциональную кубу скорости.
Думкин (2004-12-19 06:17:00) [8]> [10] Algol (18.12.04 21:47)
Вот-вот. Это самое интересное. Чего надо - алгоритма расчета по существующей модели или дать саму модель. Опять же модель чего?
Algol (2004-12-18 21:47:00) [9]2Septic
> большие капли притягивают мальенькие и сливаются с ними
А маленькие капли большие не притягивают что ли ?
Какие силы действуют в модели? Гравитационные?
Уточните модель.
Думкин (2004-12-18 19:02:00) [10]> [7] Algol (18.12.04 10:26)
> [8] TButton © (18.12.04 17:04)
Ребята, это от модели зависит или где?
Если шарики в космосе и одни? А про Землю - ну дык все ведь просто? Или разжевать?
TButton (2004-12-18 17:04:00) [11]
> > [4] TButton © (18.12.04 07:56)
>
> Ну и? Отталкивания же нет? Вот и сольются.
у меня на столе лежат два стальных шарика
лежат давно, сливаться пока не собираются
Algol (2004-12-18 10:26:00) [12]
> > Algol (17.12.04 15:32) [2]
> Почему же, если будут лететь бесконечно долго, то сольются
Ну разве что бесконечно ...
> > [4] TButton © (18.12.04 07:56)
>
> Ну и? Отталкивания же нет? Вот и сольются.
Да не сольются они. Взгляните на Землю, которая вращается вокруг Солнца, и никак не может с ним слится... К чему бы это ? %)
Думкин (2004-12-18 10:17:00) [13]> [4] TButton © (18.12.04 07:56)
Ну и? Отталкивания же нет? Вот и сольются.
Я бы убрал пункт 3. Зачем он?
> [5] Septic (18.12.04 08:19)
Вопрос не глупый, но говрящий о плохой продуманности всей темы вами.
Septic (2004-12-18 08:19:00) [14]А как норма зизовать вектор? (Вопрос наверное тупой?)
TButton (2004-12-18 07:56:00) [15]
> Почему же, если будут лететь бесконечно долго, то сольются
потому же
что может возникнуть ситуация когда, между каплями слишком большое расстояние и слишком маленькое взаимное притяжение.
Бульдозер (2004-12-17 16:42:00) [16]> Algol (17.12.04 15:32) [2]
Почему же, если будут лететь бесконечно долго, то сольются
Algol (2004-12-17 15:32:00) [17]Могу вас огорчить, в такой постановке задача не имеет решения, поскольку возможны такие ситуации, когда капли вовсе не сольются в одну большую каплю ))
Бульдозер (2004-12-17 14:07:00) [18]> Капли могут иметь массу 0.
Капли не могут иметь массу 0. Любое тело должно обладать массой.
А вообще алгоритм прост:
Задание переменных позиции капли(S), предыдущая позиция(S_), масса(m).
для каждого цикла:
1) Нахождение вектора скорости: V=(S-S_)*fps
2) Сохраняем старые координаты.
3) Гравитация: V.y=V.y-9.8/fps
4) Сила притяжения к телам: перебераются все другие капли и данная капля притягивается к остальным по формуле(вроде правельная:) F=G*m1*m2/r^2. Отсюда находим ускорение (a=F/m), вектор которого направлен к другой капле(вычетаем координаты капель, нормализуем получившийся вектор и умножаем *a/fps)
5) Движение капли: S=S+V/fps.
Вроде должно работать. Кстати, хватит одномерного массива.