Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

гравитация и её последствия [Delphi, Windows]


Страницы:   1 2 3 4 5 6 7 8

TButton ©   (2006-05-26 17:57:00) 

свершилось! =)
я собрал мысли в кучу и вдохновлённый передачей про зарождение солнечной системы в целом и земли в частности
написал систему взаимогравитирующих частиц
прикрутил это к движку на qPixels
(2Д, говорите, не модно)
и получилось собственно вот это

http://slil.ru/22783716

очень долго мучался с настройкой мировых констант
но вроде бы что-то получилось


Cash   (2006-05-29 16:05:00) [121]

Я тут поколдовал трохи. Бубен хороший взял, потряс над модулем перед
костром предков, и... в общем там:
http://webfile.ru/968300- бинарник
http://webfile.ru/968315- сам модуль с пояснениями внутри.

:)))
Частицы..., аж самому понравились! :)))


XProger   (2006-05-29 15:44:00) [122]

TButton, присвой указатели забудь про компилятор ;)


TButton   (2006-05-29 15:36:00) [123]

2 XProger
хм... тут мне компилятор говорит, что один динамический массив другому присвоить нельзя, нет я знаю что динамический массив - четырёхбайтовый указатель на область данных, но почему-то склонен согласиться с компилятором. думаю.


TButton   (2006-05-29 12:56:00) [124]

2 Cash
про уезжание системы
не смотря на то, что все законы физики соблюдается
и сумарная кинетическая энергия системы всегда равна нулю
система склонна расшатывать сама себя
поэтому центр масс описывает замысловатые фигуры вокруг нулевой точки
об этом уже писал Soughai  в 12м посте
проблему эту я пофиксил следующим образом

после инициализации системы я "ручками" меняю параметры нулевой точки
делая её "звездой" (центром системы)
просто выставляю ей нулевые координаты, скорости и массу... очень большую массу =) это гарантирует, что прочие точки будут притягиваться к ней, а следовательно она останется центром системы

2 XProger
сейчас проверю. а ты сравнительные тесты не проводил?

2 Soughai
скоро. возможно сегодня.


Cash   (2006-05-29 11:59:00) [125]

Вон, лежит, можно брать.
http://webfile.ru/967951

100 объектов, мало но работает хорошо.


Cash   (2006-05-29 11:39:00) [126]

Ладно, с вращением разобрались. Вот только всетаки уезжает она.
Центр системы уезжает всегда по разному. Но тем не менее, сейчас
запакую и положу на просмотр.


Cash   (2006-05-29 10:20:00) [127]

TButton ©   (27.05.06 21:44) [14]:
Знаешь, TButton, я очень люблю танки! Особенно Т34, так люблю, что
поставил туда свой комп! Короче говоря в танке я сейчас и сижу! :)))

Собрал я форму, догадался как массу визуализировать, сделал систему,
а потом пронаблюдал как они все из центра разлетелись. :(
Непонял я как с ними кружиться. Они у меня только разлетаются.
Подскажи Plz, а я покажу, чего это такого я с ней сделал. В 2D через D3D!

Параметры взял с потолка: :)
Init:
n:   100;
m1: 10;
m2: 90;
r:    1;

doTic:
t: 1;

Вот так...

Тикает со скоростью 10..200 раз в сек. 50 по умолчанию.


Soughai   (2006-05-29 09:31:00) [128]

И это... Очень хочется следующую версию =)


XProger   (2006-05-28 00:29:00) [129]

TButton, дык исправленный код коллизий дал прирост в скорости? ;)


TButton   (2006-05-27 21:44:00) [130]


> вещь красивая кстати =), можно часами наблюдать...

сам прусь =)


> Напрягает, что вся система постоянно уходит куда-то врпаво
> вниз =(
> нада скроллинг космоса замутить =)

это я пофиксил вскоре после того как екзешку залил
сейчас камера центрируется относительно "звезды"
правда иногда подглюкивает
прикручу к проге интерфейс для настройки "мировых констант" и начальных параметров - выложу.


> TButton:
> А как этим модулем пользоваться???
> Тыб форму свою тоже кинул, а то как то мало понятно что
> к чему...

а очень просто. прописываешь модуль uPts в uses формы
создаёшь объект типа tPSys (как глобальную переменную или переменную формы).

инициальзация
sys.Init(<кол-во частиц>, <минимальная масса>, <максимум случайной прибавки к массе>, <радиус системы>);

потом тикаешь (по таймеру или я не знаю как)
sys.Tic(<промежуток времени для которого делается рассчёт>);

чтобы получить данные по частице проще всего - завести переменную типа tPrt и присваивать ей конкретную частицу из системы
p:=sys.pts[n];

что может понадобиться для визуализации
p.m - масса частицы (не знаю как её визуализировать)
p.r - радиус частицы (вычисляется автоматически, как радиус сферы с объёмом равным массе частицы)
p.x, p.y - пространственное положение

(примечание sys:tPSys)

как использую это всё я
* для отображения у меня битмап 640х640
* ТО(точка отсчёта) системы частиц у меня привязана к центру битмапа
т.е. 0:0 ситемы = 320:320 битмапа
* систему я инициализирую с радиусом 1, а визуализирую с радиусом 300 (поэтому в модуле при определении расстояния между частицами сумма радиусов делится на 300. это приведение к единой системе)
* отрисовкой занимается обрубок моего пиксельного движка на базе "быстрых пикселей" (tQuickPixels, можно скачать здесь в статьях)

ну вот так)
если что-то плохо объяснил или есть конкретные вопросы - спрашивай)


Cash   (2006-05-27 16:12:00) [131]

TButton:
А как этим модулем пользоваться???
Тыб форму свою тоже кинул, а то как то мало понятно что к чему...


Soughai   (2006-05-27 15:36:00) [132]

Напрягает, что вся система постоянно уходит куда-то врпаво вниз =(
нада скроллинг космоса замутить =)


Soughai   (2006-05-27 15:22:00) [133]

вещь красивая кстати =), можно часами наблюдать...


TButton   (2006-05-27 09:42:00) [134]


> Это не сила. Ибо не "обратнопропорционально квадрату расстояния"

правильно, заметил)
я не заметил)
вот это и называется проверка в две руки)


XProger   (2006-05-26 23:39:00) [135]

Кстати,
function tPSys.Gravity(p1, p2: tPrt): real;
begin
 result:=p1.m*p2.m/Dist(p1,p2)*gamma;
end;
Это не сила. Ибо не "обратнопропорционально квадрату расстояния"


Soughai   (2006-05-26 23:38:00) [136]

Ух ты млин =)
оптимизировать и оптимизировать =))


XProger   (2006-05-26 23:02:00) [137]


function tPSys.DistQ(var p1, p2: tPrt): Single;
begin
 Result := sqr(p1.x - p2.x) + sqr(p1.y - p2.y);
end;

procedure tPSys.doCollision;
var
 i, j  : integer;
 pb    : array of tPrt;
 sr, d : Single;
 count : Integer;
begin
 for i := 0 to HIGH(pts) do
   if pts[i].m 0 then
     for j := 0 to HIGH(pts) do
       if i j then
    begin
         sr := sqr((pts[i].r + pts[j].r)/320);
         d  := DistQ(pts[i], pts[j]);
         if d


TButton   (2006-05-26 20:43:00) [138]

кмтати уже на 600 сотнящ частиц фпс поднимается до 10-11, а после 400 - все 30 положеных


TButton   (2006-05-26 20:42:00) [139]

re [2], [3]
легко
http://slil.ru/22784148
только там мало комментариев, но там настолько сыро, что всё и так понятно)

re[4]
почему никакой? частица не взаимодействует сама с собой, только с другими частицами.
в оптимизации нуждается коллизия частиц, вот там да. там лес густой) просто я ещё не совсем определился как лучше это оптимизировать)


RzCoDer   (2006-05-26 19:56:00) [140]

хых, 3 фпс
Я так понимаю, что для каждой частици по отношению к каждой был просто применён закон всемирного тяготения и это всё без какой либо оптимизации? Мугага


Страницы:   1 2 3 4 5 6 7 8

Наверх

Титульная страница Поиск, карта сайта Написать письмо