Текущий архив: 2005.03.20;
Скачать: CL | DM;
Вниз
Перетекание массы в массиве Найти похожие ветки
← →
Septic (2004-12-17 05:47) [0]Нужен алгоритм реализующий перетекание массы в массиве. Дан массив в котором находятся капли, обладающие некоторой массой, большие капли притягивают мальенькие и сливаются с ними, и так до тех пор пока не останется одна капля. Массив 2-мерный. Капли могут иметь массу 0.
← →
Бульдозер © (2004-12-17 14:07) [1]> Капли могут иметь массу 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.
Вроде должно работать. Кстати, хватит одномерного массива.
← →
Algol (2004-12-17 15:32) [2]Могу вас огорчить, в такой постановке задача не имеет решения, поскольку возможны такие ситуации, когда капли вовсе не сольются в одну большую каплю ))
← →
Бульдозер © (2004-12-17 16:42) [3]> Algol (17.12.04 15:32) [2]
Почему же, если будут лететь бесконечно долго, то сольются
← →
TButton © (2004-12-18 07:56) [4]
> Почему же, если будут лететь бесконечно долго, то сольются
потому же
что может возникнуть ситуация когда, между каплями слишком большое расстояние и слишком маленькое взаимное притяжение.
← →
Septic (2004-12-18 08:19) [5]А как норма зизовать вектор? (Вопрос наверное тупой?)
← →
Думкин © (2004-12-18 10:17) [6]> [4] TButton © (18.12.04 07:56)
Ну и? Отталкивания же нет? Вот и сольются.
Я бы убрал пункт 3. Зачем он?
> [5] Septic (18.12.04 08:19)
Вопрос не глупый, но говрящий о плохой продуманности всей темы вами.
← →
Algol (2004-12-18 10:26) [7]
> > Algol (17.12.04 15:32) [2]
> Почему же, если будут лететь бесконечно долго, то сольются
Ну разве что бесконечно ...
> > [4] TButton © (18.12.04 07:56)
>
> Ну и? Отталкивания же нет? Вот и сольются.
Да не сольются они. Взгляните на Землю, которая вращается вокруг Солнца, и никак не может с ним слится... К чему бы это ? %)
← →
TButton © (2004-12-18 17:04) [8]
> > [4] TButton © (18.12.04 07:56)
>
> Ну и? Отталкивания же нет? Вот и сольются.
у меня на столе лежат два стальных шарика
лежат давно, сливаться пока не собираются
← →
Думкин © (2004-12-18 19:02) [9]> [7] Algol (18.12.04 10:26)
> [8] TButton © (18.12.04 17:04)
Ребята, это от модели зависит или где?
Если шарики в космосе и одни? А про Землю - ну дык все ведь просто? Или разжевать?
← →
Algol (2004-12-18 21:47) [10]2Septic
> большие капли притягивают мальенькие и сливаются с ними
А маленькие капли большие не притягивают что ли ?
Какие силы действуют в модели? Гравитационные?
Уточните модель.
← →
Думкин © (2004-12-19 06:17) [11]> [10] Algol (18.12.04 21:47)
Вот-вот. Это самое интересное. Чего надо - алгоритма расчета по существующей модели или дать саму модель. Опять же модель чего?
← →
йцукеук (2004-12-19 14:58) [12]Добавь силу трения пропорциональную кубу скорости.
← →
Septic (2004-12-21 16:54) [13]Вот формулирвка задания, которое мне нужно: Имитация перетекания массы в массиве – меньшая капля перетекает в ближайшую большую и т.д. Маленькие капли большие не притягивают. Нет тут гравитации.
← →
Septic (2004-12-22 03:20) [14]Я тут сам кое-что придумал.
1. Осмотреть ячейки вокруг капли A на расстоянии L(первоначально L=1).
2.Если во всех ячейках 0, то L=L+1 и перейти к п.1.
3. Выбираем самую большую каплю из просмотренных ячеек, если она больше капли A, то перемещаем каплю A в ее сторону на 1 ячейку.
← →
П7 (2004-12-22 13:20) [15]Тогда возникает вопрос, с какой капли начинать "движение к слиянию", чтобы это реалистично смотрелось... (:
← →
П7 (2004-12-22 14:32) [16]Про массив вроде уже всё объяснили, всё должно быть ясно. Да и неинтересно мне было в массиве считать. Поэтому накромсал тут маленькую демку. Поганенько, правда, никакой тебе физики. Но функцию свою выполняет: 100 капель сливаются в одну (:
http://animka.com/stuff/dropsalg.rar
← →
Septic (2004-12-23 05:10) [17]А где взять p7_gfxvector.h? Мне для Builder надо.
← →
П7 (2004-12-23 12:11) [18]Здесь можешь взять p7_gfxvector.pas и самостоятельно под С++ переделать.
http://animka.com/stuff/p7_gfxvector.pas
Страницы: 1 вся ветка
Текущий архив: 2005.03.20;
Скачать: CL | DM;
Память: 0.49 MB
Время: 0.026 c