Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 2007.08.12;
Скачать: [xml.tar.bz2];

Вниз

гравитация и её последствия   Найти похожие ветки 

 
cyborg ©   (2006-06-02 19:17) [80]


> В JPG??? Там же альфаканал рушится!


В D3DXCreateTextureFromFileEx указываешь цветовой ключ для чёрного фона $FF000000.

Затем перед отрисовкой включай альфа блендинг (Transparent - флаг прозрачности), в данном случае true, чтобы всё было чики пуки с данной текстурой. :)


   SetRenderState(D3DRS_ALPHABLENDENABLE,1);

   if Transparent then
   begin
     SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCCOLOR);
     SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCCOLOR);
   end else
   begin
     SetRenderState(D3DRS_SRCBLEND,D3DBLEND_SRCALPHA);
     SetRenderState(D3DRS_DESTBLEND,D3DBLEND_INVSRCALPHA);
   end;


Это для девятого директа, для восьмого вроде аналогично.
Никаких альфаканалов в этом случае не нужно.


 
Asteroid ©   (2006-06-03 03:32) [81]

Очень красочно, спасибо :)
Наверное в 3D выглядело бы еще лучше, даже со спрайтами :)

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

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


 
Думкин ©   (2006-06-03 05:32) [82]

> Fosgen   (02.06.06 17:54) [79]

Так обоснованно считаю. :)
1. Создатель ветки путает кинетическую энергию с импульсом, неверно считал силу тяжести, что-то там про вечный двигатель говорил. И т.д. и т.п. И остальные далеко не ушли. Так что увы - хоть всю группу детсада приведите в 25 человек - аргумент хилый. Вы импульс считали? А вы возьмите и посчитайте - а потом трепитесь, что его нет. Он должен быть, ибо все параметры вводятся случайным образом и каким образом в итоге система имеет нулевой импульс - остается загадкой. Центра масс я не увидел, но то что вся система съезжала целиком вправо и вниз - заметил далеко не только я. Если центр масс на месте - то где же тогда массы переводящие этот центр из право-низ? Массивная центральная масса просто практически в одиночку решала местоположение центра, чем и замедлялось движение в правый нижний угол - не более.
2. На тот момент не видел, но принцип задания начальных условий - был озвучен. Скачал исходник и получил подтверждение. Почему импульс должен юыть 0 - в них не раскрыто. Он и не нулевой. В итоге легкий прямолинейный дреф центра масс. А говорить я могу - ибо принципы были озвучены. Кстати избежать этого дрейфа можно 2-мя способами.
3. Во-первых с людьми я беседовал и сообщал им как можно избавиться от проблемы. По-моему получилось конструктивно, до вашего выхода из-за печки. Вот сделает автор вывод тех данных, что я предложил - будем посмотреть.
4. А не привел, потому что ваша фраза могла быть произнесена в двух случаях  - после сильной укурки мухоморами или если вы ученик Эдельвейса Мавшкина, что впрочем ко всему вашему посту относится.

Траектории будт различны - потому что тела разные. В чем цимус вы видите? Я спорю, что разные? Вы уж разжуйте что сказать хотите этим и как это кореллирует со сказанным мной. Желательно в виде связных цитат. И можно логику - я разрешаю, а то словно запретил вот вы и мучаетесь.

Ругаться хотите? А зря. Хотя это единственное, что движет вами в общении со мной. Вы не заметили ни одной нелепости допущенной другими и с радостью накинулись на меня не вникнув в детали. А ведь ошибок у меня - пока нет. Или вы нашли?

Ожидаю Ваших обоснованных возражений по этому поводу.


 
Думкин ©   (2006-06-03 05:34) [83]

> Asteroid ©   (03.06.06 03:32) [81]

Извините, а если разбить на шарики, что изменится? Силы отталкивания возникнут?


 
Думкин ©   (2006-06-03 05:45) [84]

Для тех в танке - повторю:
Если дрейф центра масс прямолинейный и равномерный, то система верна и соответсвует элементарной механике. Если же биения и т.п. - то увы.


> Cash ©   (02.06.06 16:14) [76]
> Так, специально для товарища Думкина сделал систему без
> центральной звезды. На мой взгляд центр масс никуда не уходит, звезды
> кружат по всем канонам. Оптимизировать бы... Сообщите пожалуйста тормознее или быстрее работает, чем из [33].

Вполне допускаю, что или не уходит или уходит очень медленно. Частиц много, все скорости - случайны (местоположения). Поэтому импульс и должен быть в окрестности 0 близкой. Но предложенные алгоритмы не дают гарантии, что он нулевой. Именно это, по моему мнению и определяет дрейф системы. Скорость этого дрейфа может быть разной, но полностью, определяется начальным импульсом всей системы. Ибо внешних сил нет - он не меняется. Избавится от этого, как и писал - можно 2-мя способами.
Пока не будут получены в числе начальные значения импульса - весь разговор впустую.
А вы земляк зря так пишите. Не надо.


 
Cash ©   (2006-06-03 12:36) [85]

Думкин ©   (03.06.06 05:45) [84]:
Коллега, скажу вам откровенно - не уходит!
Создайте 5000 звезд (только во время паузы!), запустите процесс и
удостоверьтесь в том, что через 10 < N < 40 минут (зависит от процессора)
все звезды устремятся к нулевой точке, т. е. к тому самому центру масс.


 
Cash ©   (2006-06-03 12:39) [86]

Думкин ©   (03.06.06 05:45) [84]:
> А вы земляк зря так пишите.
То есть? Что не так?

> Вполне допускаю, что или не уходит или уходит очень медленно.
Коллега, скажу вам откровенно - не уходит!
Создайте 5000 звезд (только во время паузы!), запустите процесс и
удостоверьтесь в том, что через 10 < N < 40 минут (зависит от процессора)
все звезды устремятся к нулевой точке, т. е. к тому самому центру масс.


 
cyborg ©   (2006-06-03 13:18) [87]


> [86] Cash ©   (03.06.06 12:39)

Я не разбираюсь в астрономии и формулах, но и-то понял, вроде, о чём Думкин говорит. Центр масс в данном случае не нулевая точка. Так как звёзды генерируются рендомно с рендомным ускорением и направлением, то центр масс будет смещён.


 
Fosgen   (2006-06-03 13:25) [88]

>Думкин ©   (03.06.06 05:32) [82]

Так что увы - хоть всю группу детсада приведите в 25 человек - аргумент хилый. - Замечательное Ваше сравнение участников данной ветки с...

после сильной укурки мухоморами или если вы ученик Эдельвейса Мавшкина, что впрочем ко всему вашему посту относится. - Единственная эта фраза полностью характеризует Ваше отношение к собеседнику. Видимо Вам очень знаком опыт "сильной укурки мухоморами", раз Вы приводите такие аналогии и Вы - на самом деле - единственный кому кажется что центр масс куда-то дрейфует...
Собственно говоря ругаться с Вами нет никакого желания, единственная цель беседы была показать бессмысленность спора, развязанного Вами. Но общаться с человеком, считающим себя пупом Земли - неинтересно и считаю ниже своего достоинства. Засим позволю себе откланяться, пожелав создателям программы - успехов.


 
Cash ©   (2006-06-03 13:43) [89]

cyborg ©   (03.06.06 13:18) [87]:
Да, центр масс гуляет. Так поступает любая система с неравномерно
распределенной по площади массой. Весь космос на этом основан.
Покоя нет и не будет, а гармония в хаосе! (ну, это как то по телеку псих
один сказал, а я просто приплести решил :) )
На самом деле систему эту можно установить в "одном месте", если
вокруг еще будут такие же, которые будут взаимодействовать с нашей
системой. Это к вопросу о внешних силах.

В данной системе центр масс гуляет по идеальной элиптической траектории,
так что если брать по времени, то центр масс не гуляет, он на месте. :)
(в промежутке времени, когда Ц.М. проходит полный эллипс, образуется
N одинаковых точек, т. е. этот Ц.М. в моменты времени. Дак вот, они тоже
образуют Ц.М., который стоит на месте!)

Да, кстати, а относительно чего мы рассматриваем движение центра масс
системы? Ну только не надо, что: "Относительно начала координат",
там и начала то толком нет.

А TButton идать ушел считать для товарища Думкина числа. :)


 
antonn ©   (2006-06-03 14:18) [90]

Cash ©   (03.06.06 13:43) [89]
В данной системе центр масс гуляет по идеальной элиптической траектории,

эпилептичекой траектории...
:)


 
Cash ©   (2006-06-03 14:59) [91]

точно! :)))


 
Asteroid ©   (2006-06-03 17:10) [92]

> Думкин ©   (03.06.06 05:34) [83]
> Извините, а если разбить на шарики, что изменится? Силы отталкивания возникнут?
Отчего же? :) Всего лишь будет более точный расчет сил тяготеня с учетом распределения общей массы тела в некотором объеме.
Надеюсь, Вы не исопариваете тот факт, что такая модель более приближено к реальности, нежели бесконечно(*) малые точки, обладающие некоторой массой?

* В теории; при машинном вычислении конечные


 
TButton ©   (2006-06-04 02:12) [93]

ара, я нэмагу!
=)
пытался сообразить, что же делать с масштабами...
очень долго пытался...
ничего не сообразил

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


> Ну только не надо, что: "Относительно начала координат",
> там и начала то толком нет.

как это нет?
система генерируется относительно точки 0:0
если кому интересно - могу добавить вывод координатной сетки
но это всё после виндов
ибо глюки одолели
за два года, знаете ли, даже XP Pro можно так мозги засорить...


 
Думкин ©   (2006-06-04 05:46) [94]

> Asteroid ©   (03.06.06 17:10) [92]

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

> Fosgen   (03.06.06 13:25) [88]

Ну вот и проявилось - тихо сам с собою, лишь бы пнуть меня. LMD. :)

> Cash ©   (03.06.06 13:43) [89]
> cyborg ©   (03.06.06 13:18) [87]:
> Да, центр масс гуляет. Так поступает любая система с неравномерно
>
> распределенной по площади массой. Весь космос на этом основан.
>

Извините, но чушь. Причем полная.

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

А то что у вас не дрейфует(возможно - без чисел - только слова - ""Вроде, у бабки в огороде, а нам нужно в самый аккурат(с)), то у меня к вам 2 вопроса:
1. В прежней модели дрейф наблюдался?
2. Что было изменено в модели, что это дрейф вы победили?

Впрочем надо доказывать видимо не так. Ок. Если вечером найду силы - накидаю пару строк кода в которых приведу нужные величины. Выложу исходники, а не бинарник - во избежание кривотолков.

> А TButton идать ушел считать для товарища Думкина числа.
>  :)

И правильно сделал. Это разумное дествие для понимания и решения проблемы, нежели - писать ерундой.

> cyborg ©   (03.06.06 13:18) [87]

Дело не в начальном положении центра масс. У нас есть система материальных точек с центральными силами взаимодействия. Система замкнута - внешние силы отсутствуют. Применяем мы к ней механику Ньютона, а за силу берем его закон тяготения. Ньютона. Да хоть СТО или ОТО - неважно, но в приведенных кодах ни тем ни другим и рядом не стояло.
2 закон Ньютона и его же тяготения. Все.
Так вот, для замкнутых механических систем в любой инерциальной системе отсчета верно:
1. Сохраняется полная механическая энергия.
2. Сохраняется момент количества движения.
и самое для нас интересное:
3. Сохраняется полный импульс систем, который состоит из импульсов его составляющих частиц. И в любом учебнике по механике показано, что это означает, что цетр масс имеет постоянную скорость относительно этой системы отсчета.

Все. Вот и возникает вопрос, а почему центр масс приводимой системы имеет ненулевую скорость относительно той системы что ввели?
Сгениерируем 2 частицы случайным образом - сложим импульсы? Какова вероятность, что сумма импульсов 0?
Но увеличивая число частиц, как и писал, мы по всей видимости сужаем возможные вариации. Что и подемонстрировал Cash введя 5000 частиц. Но проблемы то он - не решил.
Это проблема не плохих расчетов и т.п. Это просто физика показала, что - а так и должно быть. Не более.


 
Cash ©   (2006-06-04 07:47) [95]

Думкин ©   (04.06.06 05:46) [94]
> В прежней модели дрейф наблюдался?
И еще какой! Но я не ставил целью победить дрейф системы.
У меня знаний мало для этого, а толмуд по физике доставать нет сил... :)

> Что было изменено в модели, что это дрейф вы победили?
Всего лишь уменьшил трудоемкость алгоритма с N^8 до N^2, плюс
приписал каждой планете свою гравитацию, она не рассчитывается теперь
на лету.


> Но увеличивая число частиц, как и писал, мы по всей видимости
> сужаем возможные вариации

Товарищ Думкин, земляк!, приклоняю колени. Вы отрыли мне глаза.
Я и забыл про это! Уж чего чего, а эту самую вещь я забыл. Действительно,
распределение импульсов неравномерно и суммарный импульс не нулевой.
Я же сам наблюдал за этим...

В таком случае необходимо всегда контролировать полный импульс системы
и распределять импульсы на точки так, чтобы импульс системы был нулевым.
Будет сложно... но можно!


 
Cash ©   (2006-06-04 09:47) [96]

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

http://webfile.ru/976391 - пример
http://webfile.ru/976392 - модуль

Да, кстати, после еще одной дороботки количество звезд можно поднимать
до 500, FPS у меня при этом составляет ~40.
(Но только ни в этой версии)


 
Думкин ©   (2006-06-05 05:27) [97]

> Cash ©   (04.06.06 07:47) [95]
> Будет сложно... но можно!

Рад слышать, что поняли. :)
Следить и выправлять - один способ, не очень удобный. Проще поступить иначе. Посчитать полный импульс системы, найти скорость центра масс. Затем перейти в другуюю систему отсчета отняв от всех скоростей полученый вектор. В итоге импульс системы будет 0. И таковым и должен оставаться до конца своих дней. :)

Сил вчера не нашлось - только в 00-00 закончил возиться с посадками, а потом баня и еле сегодня встал в 6-30. Но раз вопрос разрешился, то и не стоит видимо заморачиваться. Удачи.


 
tButton ©   (2006-06-05 07:51) [98]

в редакторе не смотрел, но вот этот кусок кода из doTick меня пугает

 dx:=P2.x-P1.x;
 dy:=P2.y-P1.y;
 d:=abs(dx)+abs(dy);//sqrt(dx*dx+dy*dy);
 v:=sqrt(P2.g/(d*d*d))*FTicks;
 P1.vx:=P1.vx+v*dx;
 P1.vy:=P1.vy+v*dy;

 sr:=P1.Radius+P2.Radius;
 if d < sr then Collide(P1,P2);


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


 
tButton ©   (2006-06-05 07:55) [99]

из интересных мыслей
* пусть и не визуальное, но перетекание вещества с одной частицы на другую при определённых условиях
когда для точки единичной массы притяжение соседней частицы больше чем притяжение собственной


 
tButton ©   (2006-06-05 10:47) [100]

реализация
1. А = сила действующая частицей №1 на точку массой 1, находящуюся на расстоянии равном радиусу частицы №1
2. Б = сила действующая частицей №2 на точку массой 1, находящуюся на расстоянии равном расстоянию от частицы №1 до частицы №2 - радиус частицы №1
3. если Б > А
3.1. отделяем от частицы №1 частицу массой 1 и располагаем её на расстоянии равном 1.1 радиуса частицы №1

т.о. получаем два варианта
1) частица 1 перетекает в частицу два, если частица два сильнее в гравитационном плане (и наоборот)
2) частицы перетекают друг в друга и образуют новую частицу (частицу + остатки старых), если частицы равны или приблизительно равны

получается этакая жидкая вселенная


 
Cash ©   (2006-06-05 12:13) [101]

tButton ©   (05.06.06 07:51) [98]:
d:=abs(dx)+abs(dy);
это пока эксперемент, естественно появилась погрешность. Я исправлю.

v:=sqrt(P2.g/(d*d*d))*FTicks;
Мне сперва показалось, что так должно быть лучше, а потом и на практике
подтвердилось. Там же как, под корень можем заносить ставя в квадрат,
вот я и занес. Из за этого +10 точек можно ставить.
Т. е. вот так так:
sqrt(P2.g/d)*FTicks/d == sqrt(P2.g/(d*d*d))*FTicks

Кстати из за такого вычисления d тоже +10-15 точек прибавилось, код легче
стал то есть.


 
Cash ©   (2006-06-05 12:20) [102]

tButton ©   (05.06.06 10:47) [99]
Имеешь ввиду гравитационный ветер? Срывать крыши домов на соседних
планетах??? :)))
Интересная мысль! стоит попробовать...


 
tButton ©   (2006-06-06 16:20) [103]

дядя Думкин, у меня в руках "Справочник по элементарной физике" (Издательство "Наука" Главная редакция физико-математической литературы, Москва 1965г.)

цитирую
Движение тела характеризуют также другой величи-
ной, называемой количеством движения: K = mv. Если
приложенная сила постоянна по величине и направле-
нию, то
F = (mv[t] - mv[0]) / t, или F[t] = mv[t] - mv[0].
Величина F[t] называется импульсом силы

* квадратные скобки интерпретировать как подстрочный текст
вот теперь я не вкуриваю что из этого тот импульс, который вы у меня спрашивали и как это считать если у меня нет реальной возможности запоминать v[0] для каждой частицы?

регардс


 
Ricks ©   (2006-06-07 01:55) [104]

Делал свою такую же фигню, но по другому - толком ничего не выходило, решил скачать модуль, посмотреть, как же у TButton © и Cash так все выходит хорошо.
Вот кусочек кода, которого я совсем не понял (правда, может я чего-то гоню):


function TPhysSystem.Gravity(p1, p2: TPhysPoint): real;
begin
 result:=p1.Mass*p2.Mass/Dist(p1,p2)*FDelta;
end;

...........
     dx:=qt.x-pt.x;
     dy:=qt.y-pt.y;
     g:=Gravity(pt^,qt^);
     v:=sqrt(2*g/pt.Mass);
     d:=Dist(pt^,qt^);
     vx:=dx/d;
     vy:=dy/d;
     vx:=vx*v;
     vy:=vy*v;
     pt.vx:=pt.vx+vx*FTicks;
     pt.vy:=pt.vy+vy*FTicks;
..........


Мы сначала находим СИЛУ, размерность которой равна [кг*м/с^2] а потом скорость находим из выражения КИНЕТИЧЕСКОЙ энергии, с размерностью [кг*м^2/с^2], таким образом у нас под корнем получается размерность ускорения:
(кг*м/с^2) / кг = м/с^2

Но ведь это под корнем, а что тогда получаем в значении "v"??

м^(1/2) / c???

И еще? Каким образом подбирали гравитационную постоянную?
G (не учитывая порядок) = 6.672 [Н * м^2 / кг^2]


 
tButton ©   (2006-06-07 04:18) [105]


> function TPhysSystem.Gravity(p1, p2: TPhysPoint): real;
> begin
>  result:=p1.Mass*p2.Mass/Dist(p1,p2)*FDelta;
> end;
>
> ...........
>      dx:=qt.x-pt.x;
>      dy:=qt.y-pt.y;
>      g:=Gravity(pt^,qt^);
>      v:=sqrt(2*g/pt.Mass);
>      d:=Dist(pt^,qt^);
>      vx:=dx/d;
>      vy:=dy/d;
>      vx:=vx*v;
>      vy:=vy*v;
>      pt.vx:=pt.vx+vx*FTicks;
>      pt.vy:=pt.vy+vy*FTicks;
> ..........

это код Cash"а =)
я сам его до сих пор не понимаю =)
    vx:=dx/d;
    vy:=dy/d;

это считаются проекции вектора скорости на оси OX и OY
    vx:=vx*v;
    vy:=vy*v

а это перемножение проекций векторов на скалярное значение скорости
т.е. умножаем единичный вектор на скаляр и получаем действительный вектор скорости

> И еще? Каким образом подбирали гравитационную постоянную?
>
> G (не учитывая порядок) = 6.672 [Н * м^2 / кг^2]
честно говоря я подбирал на глазок =)
потому что литературы под рукой небыло
опытным путём было установленно, что оптимальное значение для этой модели - 1/6000000

ПыСы
http://delphimaster.net/view/15-1149522690/
очень в тему =)


 
Думкин ©   (2006-06-07 06:46) [106]

> tButton ©   (06.06.06 16:20) [103]

Импульс частицы - вектор, получающийся в произведении вектора скорости на скаляр массы.
Импульс ситемы - сумма импульсов частиц его сотавляющих.
Для каждой частицы вектор скорости известен? Масса известна? Вектора складывать умеем? Так в чем заминка племяш?


 
tButton ©   (2006-06-07 07:11) [107]

значит всё-таки K = mv, тогда проблем нет
просто тяжеловато советскую научную литературу интерпретировать
одна система СГС (кому она нафиг нужна?) чего стоит

Отчёт о проделаной работе:
* пока сделал сохранение/загрузку пресетов (начальных условий генерации)
* добавил в условия генерации нальную угловую скорость с вариациями
* добавив "рейтинг" 10 наиболее массивных частиц
* пофиксил счётчик итераций
* убрал нафиг fps. вместо него теперь выводится время обсчёта "тика" и время отрисовки кадра

Планы на сегодня:
* ввести компенсацию импульса системы
* добавить отображение массы, скорости и импульса для выбраной частицы
* добавить графическое отображение вектора скорости частицы

Планы на ближайшее будущее:
* таки оптимизировать обсчёт
* рассувать информацию по закладкам, ибо места на форме начинает нехватать =)


 
tButton ©   (2006-06-07 07:16) [108]


> По каналу "Культура" дня четыре назад показывали, как Луна
> появилась, столкнулись две планеты, и компьютерная модель
> была показана, забавно :), столкнулись под острым уголм,
>  градусов 30 или 45, не помню уже, примерно половина или
> треть второй планеты раздробилась в космос, а ядро отскочив,
>  огибая Землю упала на неё, из обломков на орбите Луна собралась.
>  Вот упрощённо, так сказать, рассказал :).

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


 
Ricks ©   (2006-06-07 11:28) [109]


> tButton ©
...
> это код Cash"а =)
> я сам его до сих пор не понимаю =)
>     vx:=dx/d;
>     vy:=dy/d;
> это считаются проекции вектора скорости на оси OX и OY
>     vx:=vx*v;
>     vy:=vy*v
> а это перемножение проекций векторов на скалярное значение
> скорости
> т.е. умножаем единичный вектор на скаляр и получаем действительный
> вектор скорости


с этим как раз все в порядке, это одно и то же, что модуль скорости умножить на cos и sin угла.

А все-таки, хотелось бы услышать объяснение (Cash"а или кого-нубудь другого) насчет получения этой самой скорости (вернее, наверно ускорения)

Кстати, если вредно, оказывается, канал "Культура" по ночам смотреть
, то Discovery Science вообще ни в коем случае нельзя смотреть :)
Потом ТАКОЕ захочется сделать... :)


 
Cash ©   (2006-06-07 16:41) [110]

> это код Cash"а =)

Эй! Не спирай все на меня! :)))
Это кста... твой код. Мой без Gravity и всякого такого, там чистая
компановка. И вааааще, я отсебятину не делал, я только твой код
облегчаю. :)

> * таки оптимизировать обсчёт
Обязательно дай позырить неоптимизированный и оптимизированный модули!


 
Ricks ©   (2006-06-07 19:56) [111]


> Эй! Не спирай все на меня! :)))


Попробуйте все-таки сделать эту самую скорость по другому, я думаю примерно так:

gravity возвращает силу, которая (как известно) равна m•a, таким образом a = F / m, а вашем случае v = g / pt.Mass
Попробуйте и скажите, изменилось ли что-нибдуь.....


 
tButton ©   (2006-06-08 05:14) [112]

давайте определимся уже
моя модель физическая
в ней упор на точное использование формул и максимальный реализм происходящего
модель Cash"а - визуальная
в ней всё быстро и очень похоже не более, ибо слишком много приближений =)

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

к Думкину
посчитал вчера импульс системы... ужаснулся. импульс колеблется достигая очень больших значений (например может варьироваться от 800 до 6000 и обратно).
попробовал создать систему из 4х частиц
частицы болтаются
импульс ненулевой, но постоянный
после первой же коллизии начинается болтанка
не знаю почему, но грешу на код коллизии
sm:=p1.m+p2.m;
m1:=p1.m/sm;
m2:=p2.m/sm;
...
pr.vx:=p1.vx*m1+p2.vx*m2;
pr.vy:=p1.vy*m1+p2.vy*m2;

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


 
Думкин ©   (2006-06-08 05:41) [113]

Можешь кинуть в меня кодом. Посмотрю, может что и соображу.


 
Yokmombyk   (2006-06-08 23:05) [114]

Для суммарного нулевого импульса можно создавать мир с "анти"-телами: создаёшь частицу - создавай такую же, но с противоположно направленной скоростью.

Если у тебя где-то после стартовой инициализации есть рандомайз - импульс будет меняться :) Если рандома нет - модель кривая.

Хотя что это я, наверное чужие мысли в десятый раз повторяю. Просто ветку полностью не читал.


 
tButton ©   (2006-06-09 05:50) [115]

сорц модуля описывающего систему частиц
http://slil.ru/22822987
код коллизии
procedure tPSys.Collide(p1, p2: integer);
var
 rp: tPrt;
 sm: real;
 m1, m2: real;
begin
 m1:=pts[p1].m;
 m2:=pts[p2].m;
 sm:=m1+m2;
 m1:=m1/sm;
 m2:=m2/sm;

 rp.x:=pts[p1].x*m1+pts[p2].x*m2;
 rp.y:=pts[p1].y*m1+pts[p2].y*m2;
 rp.vx:=pts[p1].vx*m1+pts[p2].vx*m2;
 rp.vy:=pts[p1].vy*m1+pts[p2].vy*m2;

 rp.m:=pts[p1].m+pts[p2].m;
 rp.r:=masstoradius(rp.m);
 pts[p1]:=rp;
 pts[p2].m:=0;
end;

свежий екзешник
http://slil.ru/22822989


 
tsa   (2006-06-09 11:57) [116]

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


 
Ricks ©   (2006-06-09 17:56) [117]

Поделюсь своими достижениями:
http://www.ricks.pisem.net/space.zip

(исходники внутри)

специально сделал вывод центра масс и расчет импульса. Импульс сохраняется, центр масс почти не двигается, но вот большинство объектов либо падает на центральную звезду либо улетает... :(


 
tButton ©   (2006-06-10 16:02) [118]

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


 
tButton ©   (2006-06-10 16:04) [119]

решил (теоретически) проблему с масштабами, теперь для вещества в системе будет задаваться плотность, которая будет выступать коэффициентом в рассчёте масса->радиус


 
Ricks ©   (2006-06-11 19:39) [120]

Не иначе как у меня "подсмотрел"? Ну что же, я не против, собственно для этого и выкладывал, но хоть бы кто слово про мою программулину сказал...



Страницы: 1 2 3 4 вся ветка

Форум: "Игры";
Текущий архив: 2007.08.12;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.78 MB
Время: 0.063 c
2-1184854326
kyro
2007-07-19 18:12
2007.08.12
Можно ли в дбшрид дважды загрузить данные


2-1184756653
ouchs
2007-07-18 15:04
2007.08.12
uses для функции PostVirtualKeyEvent


2-1184611472
bagos
2007-07-16 22:44
2007.08.12
chart


15-1184239754
Кевларвестов Семен
2007-07-12 15:29
2007.08.12
Определить Null или Not Null Поле в БД


15-1184569945
PZ
2007-07-16 11:12
2007.08.12
Странное явление





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский