Форум: "Игры";
Текущий архив: 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 и OYvx:=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