Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.08.12;
Скачать: CL | DM;

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.76 MB
Время: 0.039 c
2-1184347870
nord489
2007-07-13 21:31
2007.08.12
Работа с файлами


15-1184009465
Petr V. Abramov
2007-07-09 23:31
2007.08.12
задача по физике :)


2-1184346134
WFS
2007-07-13 21:02
2007.08.12
Как поменять название поля в базе данных (программным образом)?


15-1184602971
pasha_golub
2007-07-16 20:22
2007.08.12
utf8 to cp1251


15-1184260431
Alarm
2007-07-12 21:13
2007.08.12
Посьба к app