Форум: "Игры";
Текущий архив: 2007.08.12;
Скачать: [xml.tar.bz2];
Внизгравитация и её последствия Найти похожие ветки
← →
TButton © (2006-05-26 17:57) [0]свершилось! =)
я собрал мысли в кучу и вдохновлённый передачей про зарождение солнечной системы в целом и земли в частности
написал систему взаимогравитирующих частиц
прикрутил это к движку на qPixels
(2Д, говорите, не модно)
и получилось собственно вот это
http://slil.ru/22783716
очень долго мучался с настройкой мировых констант
но вроде бы что-то получилось
← →
TButton © (2006-05-26 18:00) [1]пысы
основная потеря фпс происходит за счёт сложных рассчётов взаимодействия частицтормоза = кол-во_частиц^2 * кол-во_операций_с_одной_частицей / тактовая_частота_процессора
← →
XProger © (2006-05-26 18:43) [2]TButton, дай исходник этого "взаимодействия" - ускорим... ;)
← →
Rial © (2006-05-26 18:57) [3]Кошмар, FPS=2 !
Что же там такое творится?
> XProger © (26.05.06 18:43) [2]
>
> TButton, дай исходник этого "взаимодействия" - ускорим..
> . ;)
Поддерживаю.
← →
RzCoDer © (2006-05-26 19:56) [4]хых, 3 фпс
Я так понимаю, что для каждой частици по отношению к каждой был просто применён закон всемирного тяготения и это всё без какой либо оптимизации? Мугага
← →
TButton © (2006-05-26 20:42) [5]re [2], [3]
легко
http://slil.ru/22784148
только там мало комментариев, но там настолько сыро, что всё и так понятно)
re[4]
почему никакой? частица не взаимодействует сама с собой, только с другими частицами.
в оптимизации нуждается коллизия частиц, вот там да. там лес густой) просто я ещё не совсем определился как лучше это оптимизировать)
← →
TButton © (2006-05-26 20:43) [6]кмтати уже на 600 сотнящ частиц фпс поднимается до 10-11, а после 400 - все 30 положеных
← →
XProger © (2006-05-26 23:02) [7]
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 <= sr then
Collide(i, j);
end;
// ÷èñòèì íóëåâûå ÷àñòèöû
count := 0;
for i := 0 to HIGH(pts) do
if pts[i].m <> 0 then
inc(count);
SetLength(pb, count);
count := 0;
for i := 0 to HIGH(pts) do
if pts[i].m <> 0 then
begin
pb[count] := pts[i];
inc(count);
end;
pts := pb;
end;
ТУРБААААА!!! ;)
← →
Soughai (2006-05-26 23:38) [8]Ух ты млин =)
оптимизировать и оптимизировать =))
← →
XProger © (2006-05-26 23:39) [9]Кстати,
function tPSys.Gravity(p1, p2: tPrt): real;
begin
result:=p1.m*p2.m/Dist(p1,p2)*gamma;
end;
Это не сила. Ибо не "обратнопропорционально квадрату расстояния"
← →
TButton © (2006-05-27 09:42) [10]
> Это не сила. Ибо не "обратнопропорционально квадрату расстояния"
правильно, заметил)
я не заметил)
вот это и называется проверка в две руки)
← →
Soughai (2006-05-27 15:22) [11]вещь красивая кстати =), можно часами наблюдать...
← →
Soughai (2006-05-27 15:36) [12]Напрягает, что вся система постоянно уходит куда-то врпаво вниз =(
нада скроллинг космоса замутить =)
← →
Cash © (2006-05-27 16:12) [13]TButton:
А как этим модулем пользоваться???
Тыб форму свою тоже кинул, а то как то мало понятно что к чему...
← →
TButton © (2006-05-27 21:44) [14]
> вещь красивая кстати =), можно часами наблюдать...
сам прусь =)
> Напрягает, что вся система постоянно уходит куда-то врпаво
> вниз =(
> нада скроллинг космоса замутить =)
это я пофиксил вскоре после того как екзешку залил
сейчас камера центрируется относительно "звезды"
правда иногда подглюкивает
прикручу к проге интерфейс для настройки "мировых констант" и начальных параметров - выложу.
> 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, можно скачать здесь в статьях)
ну вот так)
если что-то плохо объяснил или есть конкретные вопросы - спрашивай)
← →
XProger © (2006-05-28 00:29) [15]TButton, дык исправленный код коллизий дал прирост в скорости? ;)
← →
Soughai (2006-05-29 09:31) [16]И это... Очень хочется следующую версию =)
← →
Cash © (2006-05-29 10:20) [17]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 по умолчанию.
← →
Cash © (2006-05-29 11:39) [18]Ладно, с вращением разобрались. Вот только всетаки уезжает она.
Центр системы уезжает всегда по разному. Но тем не менее, сейчас
запакую и положу на просмотр.
← →
Cash © (2006-05-29 11:59) [19]Вон, лежит, можно брать.
http://webfile.ru/967951
100 объектов, мало но работает хорошо.
← →
TButton © (2006-05-29 12:56) [20]2 Cash
про уезжание системы
не смотря на то, что все законы физики соблюдается
и сумарная кинетическая энергия системы всегда равна нулю
система склонна расшатывать сама себя
поэтому центр масс описывает замысловатые фигуры вокруг нулевой точки
об этом уже писал Soughai в 12м посте
проблему эту я пофиксил следующим образом
после инициализации системы я "ручками" меняю параметры нулевой точки
делая её "звездой" (центром системы)
просто выставляю ей нулевые координаты, скорости и массу... очень большую массу =) это гарантирует, что прочие точки будут притягиваться к ней, а следовательно она останется центром системы
2 XProger
сейчас проверю. а ты сравнительные тесты не проводил?
2 Soughai
скоро. возможно сегодня.
← →
TButton © (2006-05-29 15:36) [21]2 XProger
хм... тут мне компилятор говорит, что один динамический массив другому присвоить нельзя, нет я знаю что динамический массив - четырёхбайтовый указатель на область данных, но почему-то склонен согласиться с компилятором. думаю.
← →
XProger © (2006-05-29 15:44) [22]TButton, присвой указатели забудь про компилятор ;)
← →
Cash © (2006-05-29 16:05) [23]Я тут поколдовал трохи. Бубен хороший взял, потряс над модулем перед
костром предков, и... в общем там:
http://webfile.ru/968300 - бинарник
http://webfile.ru/968315 - сам модуль с пояснениями внутри.
:)))
Частицы..., аж самому понравились! :)))
← →
TButton © (2006-05-29 17:10) [24]http://slil.ru/22791706
обнова интерхвейса
всё что есть внутри задаётся снаружи
(Дискретизация в микросекундах)
← →
Cash © (2006-05-29 17:24) [25]Где то через 2 минуты наступает абскурация мира. Этакий судный день! :)))
И в результате из 1000 звезд остается только 110-120. Зрелище красивое,
еще бы к этому анимацию прикрутить, это было бы красиво. :)
← →
Soughai (2006-05-29 19:38) [26]по моему было бы интереснее, если бы небыло точного центра, а было бы скопление звёзд.
и чтобы эта система развивалась.
или чтобы центр был, но если какая-то звезда станет больше него, то он может быть поглащён =) ( вот это было бы действительно прикольно =) )
← →
Cash © (2006-05-29 20:18) [27]TButton © (29.05.06 17:10) [24]:
Нада UI с красивой отдачей? Сделал, на мой взгляд, давольно красиво.
Бинарник без D3DX81ab.dll лежит по адресу: http://webfile.ru/968713
сама библиотека на: http://webfile.ru/968725
а исходник (нужен Omega 93 GDK пакет) там: http://webfile.ru/968716
Система построена на моем классе с твоей начинкой (я даже код не
менял) :).
← →
TButton © (2006-05-30 00:34) [28]
> по моему было бы интереснее, если бы небыло точного центра,
> а было бы скопление звёзд.
> и чтобы эта система развивалась.
> или чтобы центр был, но если какая-то звезда станет больше
> него, то он может быть поглащён =) ( вот это было бы действительно
> прикольно =) )
так кто ж тебе не даёт эксперементироватьс настройками)
> Я тут поколдовал трохи. Бубен хороший взял, потряс над модулем
> перед
> костром предков, и... в общем там:
> http://webfile.ru/968300 - бинарник
> http://webfile.ru/968315 - сам модуль с пояснениями внутри.
>
>
> :)))
> Частицы..., аж самому понравились! :)))
пытался скачать - не удалось
в предыдущем релизе всё равботает, только что-то у тебя с коллизией не так
кстати,
2 XProger
тестировал коллизию...
понял что в принципе, она сильно на скорость не влияет
на скорость сильно влияет CalcVectors
вот это вот и надо оптимизировать больше всего
думаю, что же там можно сделать.
← →
TButton © (2006-05-30 00:48) [29]к следующему релизу:
* сохранение/загрузка пресетов для инициализации
* сохранение/загрузка состояния системы частиц
* более детальная информация по выделеной частице
* panning вселенной (возможно)
* выделение частицы кликом (возможно)
← →
Cash © (2006-05-30 06:38) [30]TButton © (30.05.06 00:34) [28]:
> в предыдущем релизе всё равботает, только что-то у тебя
> с коллизией не так
Да, я это профиксил уже, в [27] лежит нормальная вещь! Ты ее скачай,
закачаешься! :))) Я там добавил splash небольшой при коллизии одной
звезды с другой. Кстати, массу я визуализировать придумал с помощью
цвета, звезды раскрашены от желтого через зеленый к aqua цвету.
Мне так покрайней мере понравилось.
← →
TButton © (2006-05-30 09:45) [31]видел новый.
центральная частица либо рисуется как-то не так, либо не учавствует в коллизии
и в целом стало тормознее...
да и сплэши они как-то иногда отстают =)
(в смысле отстают сильно)
← →
Cash © (2006-05-30 14:52) [32]Тормознее??? А у меня быстрее было. Ну да и эту вещь я тоже правил.
Сегодня в универ сносил, там компы древние. Новенькая прожка, которую
утром сбилдил, дала в универе на 128~250 звездах 6 кадров всекунду.
А там система, 800MHz/S3 8Mb Video/128 Mb RAM. Такой FPS меня удивил
даже.
Я все операции в один цикл загнал, стало работать быстрее. А тормоза
могут проявляться и от прорисовки. Там 6 точек на звезду, и каждая точка
предворительно подготавливается. На твоем пиксельном двиге это будет
быстрее.
А чего такого с центральной звездой? И в чем тормознутость сплэшей?
(сразу скажу, сплэш за звездой не идет, он возникает в месте
соприкосновения двух звезд)
← →
Cash © (2006-06-01 19:52) [33]Вон, если еще кому интересно, поправил маленько код (блин сессия скоро,
а мне делать нечего! :))) ), да и в общем поставил его как скринсейвер,
только без фич с настройкой и пред-просмотром.
http://webfile.ru/973571 - бинарник, к нему D3DX81ab.dll нодо.
http://webfile.ru/973582 - модуль с правленным классом.
У меня эта вещь на 128 точках 400++ FPS дает, а на 360 - ~40 FPS.
← →
Думкин © (2006-06-02 05:48) [34]> TButton © (29.05.06 12:56) [20]
> 2 Cash
> про уезжание системы
> не смотря на то, что все законы физики соблюдается
> и сумарная кинетическая энергия системы всегда равна нулю
> система склонна расшатывать сама себя
> поэтому центр масс описывает замысловатые фигуры вокруг
> нулевой точки
? Возможно импульс имелся в виду? Расшатывать из-за погрешностей модели?
← →
Думкин © (2006-06-02 05:50) [35]А если ввести еще обработку соударений? И в ряде случаев, чтобы частицы слипались? Появятся планеты со спутниками?
← →
Думкин © (2006-06-02 05:57) [36]Хотя поглощение происходит. Будем посмотреть.
← →
TButton © (2006-06-02 07:27) [37]
> ? Возможно импульс имелся в виду? Расшатывать из-за погрешностей
> модели?
возможно имелся в виду импульс
три года учёбы и два года отупляющей работы
негативно влияют на вспоминание правильных физических терминов
хотя я точно помню, что квадрат скорости на массу пополам - кинетическая энергия
чем бы там ни был импульс он будет ей пропорционален, так что это не критично
погрешности модели допустимы лишь относительно визуализации
относительно физики могут присутствовать лишь погрешности законов физики =)
(возможность создания вечного двигателя доказана теоретически)
> А если ввести еще обработку соударений? И в ряде случаев,
> чтобы частицы слипались? Появятся планеты со спутниками?
вот именно над спутниками второго порядка я и бьюсь с самого начала
на следующей неделе планирую взяться за очередной релиз
(сейчас немного другим занят)
в порядке эксперемента попробую в ручную создать модель солнечной системы, воспроизведя в ней в некотром масштабе все расстояния и массы (ну и коэффициент гравитации)
мысль о соударениях частиц без слипания безусловно интересна
т.е. столкновение с образованием осколков
но она требует введения физических характеристик частиц
(частицы газа и частицы твёрдого вещества при коллизии ведут себя по-разному)
а сие есть... введение дополнительных сложностей
← →
Cash © (2006-06-02 07:29) [38]Думкин © (02.06.06 05:48) [34]..[36]:
Товарищ, но ведь и галактики не стоят на месте, хоть их суммарная
кинетическая энергия равна 0. Равновесие энергии есть, но нет равновесия
по массе, всегда в каком либо краю суммарная масса будет больше или
меньше по сравнению с противоположным краем. Поэтому система и едет.
Просто притяжение одной половины галактики больше, а другой меньше и
область с большей гравитацией проходит меньший путь к центру системы
тем самым смещая его.
Спутники на планетах там тоже образуются. Когда планета набирает
достаточный вес и уходит достаточно далеко от центра системы, и при этом
к ней по приемлемой траектории приближается маленькая планета, масса
и скорость которой удовлетворяет условиям, то этот маленький метеор
заходит на орбиту планеты и становится луною. Зрелище неописуемо,
только в системе из [33] этого ждать придется около часа или поболее.
Система в кондицию должна прийти. :)
← →
TButton © (2006-06-02 07:47) [39]
> этого ждать придется около часа или поболее.
> Система в кондицию должна прийти. :)
на начальных этапах можно выставить дискретизацию 50мкс
это позволит быстро пройти этап формирования протопланет
позже можно выставить дискретизацию ~5 (по умолчанию - 3.3) мкс
просто при больших промежутках между обсчётом может произойти банальное проскакивание одной частицы сквозь другую
в другой ситуации это решилось бы трассированием, но здесь это не приемлимо =)
ПыСы
возникла мысль, что на базе всего этого мог бы получиться неплохая Space Arcade. единственная проблема - визуализация, ведь даже самая маленькая планета несоизмеримо больше космического корабля =)
← →
Cash © (2006-06-02 07:55) [40]
> ведь даже самая маленькая планета несоизмеримо больше космического
> корабля
А это кто сказал??? 8)
В Hegemonia только истребки и планетарные колонизаторы меньше планет,
орбитальные станции почти с пол планеты, а БШ, линкоры и т. д, они
соизмеримы вроде были.
Но сначала надо еще больше оптимизировать эту систему, чтобы у нее
трудоемикость не была квадратической. (в модуле из [33] она такая, а в
других - порядок больше)
← →
Думкин © (2006-06-02 07:58) [41]> Cash © (02.06.06 07:29) [38]
Извините, но вы видимо абсолютно не в ладах со школьной механикой. Кинетическая энергия - она нулю может быть равно только при одном условии - скорости всех частиц равны 0.
Все-таки про импульс речь видимо. Если система замкнута, а эта система таки замкнута и сумма внешних сил равна 0, то центр масс остается на месте и именно сумарный импульс остается прежним. Если начальный импульс системы 0, то и в последующем он должен оставаться таковым.
Исходников не видел и т.п. Но было бы интересно посмотреть в начальный момент - как в импульс системы. вполне возможно, он не нулевой, потому и смещение. Либо погрешности в модели и обсчетах.
Если же про энергию, то сохраняется суммарная - кинетическая и потенциальная.
> TButton © (02.06.06 07:47) [39]
Было бы неплохо выводить информацию об импульсах по координатам совокупный и также по 2-м эенергиям и их сумму. И вывести начальные значения, а потом сравнивать с текущими. Как писал выше - импульс не должен меняться, равно как и сумма энергий - дополнительная проверка.
Затем сделать так(в начальный момент) - если начальная система обладает ненулевым импульсом и центр масс не в центре, вводить частицу, которая бы компенсировала этот дефект как по импульсу, так и по центру масс.
← →
Думкин © (2006-06-02 08:01) [42]> Cash ©
Если вы обидитесь, то зря. :) Извините, если резко получилось.
← →
Думкин © (2006-06-02 08:04) [43]Вполне моет оказаться, что центр масс движется в полном соответствии с начальным импульсом. Можно проверить. Тогда неплохо бы добавить и вывод текущих координат центра масс.
← →
TButton © (2006-06-02 08:11) [44]
> В Hegemonia
дык речь идёт об аркаде, а не о стратегии =)
> (в модуле из [33] она такая, а в
> других - порядок больше)
требуемые 30фпс выдаются уже на двух сотнях частиц
> Было бы неплохо выводить информацию
планировал (в самом начале). приду домой - сделаю. заодно залезу в справочник уточню что такое импульс.
а неравномерность распределения массы и породила то что мы сегодня имеем возможность наблюдать, и нас с вами в том числе.
касательно центра масс.
частицы распределяются случайным образом (случайные полярные координаты), массы частиц также случайны, поэтому центр масс может быть близко к началу координат, но не совпадать с ним. т.е. система представляет собой диск со смещённым центром тяжести, отсюда и расшатывание. хотя наличие в центре диска массивной (во много раз превосходящей по массе остальные) частицы должно это расшатывание некоторым образом компенсировать.
← →
Cash © (2006-06-02 08:13) [45]Делать мне больше нечего! обижаться еще! ;)
Во первых, от части вы правы, с физикой у меня было туго.
Как там говорится, на самом деле любые два тела притягиваются друг к
другу и на самом деле и земля притягивается к подпрыгнувшему человеку,
но их массы несоизмеримы и притяжение земли к человеку незначительно,
но притяжение человека к земле заметно. Я вот на это уповаю, да и к тому
же в передачках о космосе точно так же говорят.
← →
Думкин © (2006-06-02 08:18) [46]> TButton © (02.06.06 08:11) [44]
1. Импульс - это вектор. Соответственно у вас 2 скаляра. Каждый получается суммированием произведения проекции скоростей(с учетом знака) на соответствующую массу.
2. Неравномерность - это по барабану. Пусть хоть 100 раз неравномерно. Но центр тяжести при нулевом импульсе - на месте. Если не нулевой, то будет двигаться в направлении начального импульса с постоянной скоростью. Никакого расшатывания не должно быть в принципе. Ньютон в гробу перевернется. :) Если конечно у вас нет в нешних сил. а их у вас нет.
И почему вправо-вниз? Там Randomize есть? Если каждый раз абсолютно случайно, неплохо было бы наблюдать симметрию, то есть смещение системы в разных направлениях.
Как этого избежать я указал. Но сначала надо проверить на вашей модели, что все обстоит именно так.
← →
Cash © (2006-06-02 08:18) [47]
> требуемые 30фпс выдаются уже на двух сотнях частиц
Трудоемкость алгоритма еще слишком велика, я попробую что нибудь
придумать, но ничего заранее говорить не буду.
Есть у меня некоторые задумки! ;)
← →
Думкин © (2006-06-02 08:20) [48]> Cash © (02.06.06 08:13) [45]
Но центр масс - на месте. просто смещение земли маленькое. Человек притягивает Землю ровно также как и она его. Только вот для заметного смещения Земли - силы мало. а для человека вполне хватает, чтобы нос расквасить, но и земле достается.
Неважно ведь столб на вас налетел или вы на столб. Больно обоим. :)
← →
Cash © (2006-06-02 08:23) [49]Думкин © (02.06.06 08:18) [46]:
А вы какую теорию к данной ситуации применяете? У меня впечатление,
что не ту...
У меня центр системы гулял как ему захочется, т. е. то, о чем я говорил,
а то, что вы наблюдали в первом релизе TButton-овской системы я чесно
говоря тоже склонен считать результатиом погрешности вычислений.
← →
Думкин © (2006-06-02 08:26) [50]> Cash © (02.06.06 08:23) [49]
?
Обычная механика Ньютона. Кикоины 8 класс. Физика. Например.
Если центр гулял - значит или силы неНьютоновские или модель кривая.
Все-таки я считаю, что смещение системы происходит, из-за того что начальный импульс системы ненулевой, а имеет направлением правый нижний угол.
← →
Cash © (2006-06-02 08:31) [51]Модель не кривая! Там СТО надо применять! Это же не на земле, там
космические силы работают. Ньютон все законы вывел исходя из земного
завновесия, а там, на орбите они мало кому помогают (инвалибам и
сердечникам разве что, ито только их несоблюдение). СТО же была
разработана как теория космического взаимодействия. (мож я бредятину
несу, но мне по крайней мере что то такое вспоминается) :)
← →
Думкин © (2006-06-02 08:49) [52]> Cash © (02.06.06 08:31) [51]
Вы именно ее и несете. :)
СТО, ОТО - не важно. А в каком месте вы применяете СТО или ОТО?
Можно формулы увидеть?
:)
Если уж про ОТО - то там не обратная квадратичность от расстояния, а сложнее. Можно восполнить доп членом с обратной кубичностью. Но тут и эффект сразу - отсутствие замкнутых орбит( смещение перигелия Меркурия, например).
Но все утверждения про центр масс и т.п - остаются в силе.
← →
Cash © (2006-06-02 09:01) [53]> Вы именно ее и несете.
Рад слышать! :)))
В модуле в [33] в методе DoTick, все просчеты в ней, остальные методы -
левое, рудименты то есть.
У меня просто в балде не укладывается как это так, Ньютоновскую теорию
присобачивать к космосу. Да, и к тому же я только оптимизирую работу
алгоритма TButton-а, не нарушая его прав на владение алгоритмом.
Давайте ка возьмем с вами диск, абсолютно сбалансированный, где
центр масс совпадает с осью вращения. Вращая диск, мы не будем
наблюдать отклонение его от того места где мы его оставили, так ведь?
← →
Думкин © (2006-06-02 09:12) [54]> Cash © (02.06.06 09:01) [53]
Не будем. А если не сбалансированный, то при отсутствии внешних сил он будет вращаться вокруг центра масс, который не будет совпадать с геометрическим центром.
А вот если вы ззахотите его вращать вокруг геометрического - то увидите болтанку и приложите внешние силы, чтобы ее избежать.
← →
TButton © (2006-06-02 09:16) [55]ой вей =)
естествеено
1) вся система в начале раскручивается, т.е. обладает некоторым начальным импульсом. но! при генерации системы используется полярная система координат. а при генерации начальных скоростей используются угловые скорости и они для всех частиц равны.
2) в принципе без раскручивания системы центр всё равно гуляет
причём гуляет куда хочет (как же я без рандомайза)
3) возьмите обычный детский волчок, прилепите к нему с боку жевачку и раскрутите, а потом утверждайте, что неравномерность по боку.
4) про первый релиз и думать забудьте, там ошибка с вычислением силы притяжения.
5) в остальных релизах центр всё равно гуляет, но! гуляет не в одном каком-то на правлении. а гуляет по кривой.
6) просто информация. при генерации звезды она помещается в точку начала координат и импульс её гасится. не знаю. как это на что-то влияет. импульса нет, значит влиять не должно никак.
← →
Cash © (2006-06-02 09:20) [56]Мне просто интересно увидеть ход ваших мыслей по этому вопросу.
> А вот если вы ззахотите его вращать вокруг геометрического
> - то увидите болтанку
Именно это в программе мы и наблюдаем! Там постоянно идет перемещение
центра масс, и он никогда не будет совпадать с геометрическим центром,
ну разве что только на один - 2 тика, но это малые промежутки времени.
Вся система подчиняется и вращается постоянно вокруг этого центра,
тем самым давая ему повод опять сместиться. Естественно, приложив
некоторые силы всей системе мы ее установим в каком либо устойчивом
положении, но это не будет гармонией, а только тратой энергии.
← →
Думкин © (2006-06-02 09:21) [57]> TButton © (02.06.06 09:16) [55]
По боку. К волчку приложена внешняя сила.
Я повторяю - вы посмотрите все-таки предложенное мной . выведите начальные значения - центра масс и компоненты импульса. И последите за их изменением.
Извините, но читать курс школьной физики немного утомительно.
Если гуляет не по прямой с постоянной скоростью, то:
1. Модель кривая.
2. Погрешности расчетов.
Ничего иного быть не может.
← →
Думкин © (2006-06-02 09:23) [58]> Cash © (02.06.06 09:20) [56]
В модели вашей - нет внешних сил.
Все. На этом просто - все. Извините, но это курс элементарной школьной физики. Про более высокие материи я и разговаривать смысла просто не вижу.
Пока вы этого не поймете, все остальное - просто разговоры. :(
← →
Cash © (2006-06-02 09:31) [59]Думкин © (02.06.06 09:23) [58]:
> В модели вашей - нет внешних сил.
Да им просто неоткуда взяться!
> Пока вы этого не поймете, все остальное - просто разговоры.
Ну... как пожелаете, коллега.
← →
Cash © (2006-06-02 09:44) [60]Так, есть у кого ни будь мысли, как у этого алгоритма снизить трудоемкость
с N^2 до N*Log(N)? Это будет колоссальный прирост производительности!
Если что, модуль в [33].
← →
Fosgen (2006-06-02 10:04) [61]Г-ну Думкину:
Ваш спор - ни о чем. Все вылилось на самом деле из-за того что Вы, уважаемый, перепутали визуально определяемый геометрический центр, с визуально скрытым центром масс системы. Центр масс стоит на месте, как ему и положено, а видимый геометрический центр (который из-за неравномерности распределения массы никак не совпадает с центром масс) - прецессирует так как ему захочется. Если я правильно предполагаю, вследствие однонаправленности вращения - прецессия будет скорее всего - так же однонаправленной и иметь траекторию спирали...
Таким образом - сохраняется правило неподвижного центра масс при замкнутости системы и сохраняется внутренняя стабильность самой системы.
Погрешностей критичных для центра масс (не путайте с визуальным центром) там вроде нет, а модель - очень даже "прямая".
Насчет волчка - тут Вы, уважаемый очень не правы. Если распределение массы по волчку будет неравномерным (т.е. - его центр масс смещен, относительно геометрического), то геометрический центр так же выдаст прецессию. Воздействуют на него внешние силы или нет - без разницы...
Дабы исключить Ваши сомнения - уточняю: волчок со жвачкой и волчок без жвачки :)) находятся в равных системах воздействия внешних сил - вы же в одном и том же месте их раскручиваете или даже это - один и тот же волчок. Но поведение их в обоих случаях будет разным... Есть у Вас, уважаемый, некоторая погрешность в знаниях ОТО - Вы забыли что внешние для двух систем силы, можно брать как общую точку отсчета...
← →
cyborg © (2006-06-02 10:09) [62]Неплохо бы, при столкновении планет, создавать дополнительные объекты - осколки, а появление из неоткуда новых планет отключить, либо по нажатию какой либо клавиши генерировать объекты пришельцы, а не неизвестно откуда появившиеся планеты.
Притяжение, на глаз, какое-то не реалистичное :), две большие планеты пролетают рядом (думал столкнутся), но практически ничего не происходит, я ожидал что орбиты сильно изменятся. Аналогично, когда маленькая пролетает рядом с большой, она либо столкнётся, либо орбита незначительно изменится (хотя я ожидал, что она станет луной). Масштаб можно раза в 4 уменьшить, тогда на экране больше уместится и можно реализовать спутники.
Советовать конечно легко :)
Кстати, могу текстуры планет дать :).
← →
Думкин © (2006-06-02 11:07) [63]> Fosgen (02.06.06 10:04) [61]
г-ну Fosgen"у:
Ваши фразы ни о чем. вы уважаемый не видели видимо программы, так вот там смещается все.
А я не путаю геомеьтрический центр и центр масс. Квалификация не позволяет знаете ли. Мне как раз было интересно узнать, как люди не рассчитывая местоположение центра масс тем не менее говорят о каких-то биениях.
И про прецессию мне не надо. Как и сказал прецессия будет вызвана внешними силами. А именно реакцией опоры и силой тяжести. В данном же случае внешних сил нет. поэтому центр масс будет двигаться именно так как и описал я.
далее, если еще захотите читать мне лекции, то пожлуйста почитайте, что я пишу, а не то что вы подумали. Очень прошу. А то даже не смешно. Уважаемый.
← →
Думкин © (2006-06-02 11:08) [64]> Fosgen (02.06.06 10:04) [61]
И почему происходят смещения - я указал. Из-за начальных данных. Покуа э\ти данные не рассчитываются и не выводятся. Подождем.
← →
Думкин © (2006-06-02 11:09) [65]Про ОТО - это мне под стол лезть смеяться? :)
LOL
← →
TButton © (2006-06-02 11:49) [66]
> Неплохо бы, при столкновении планет, создавать дополнительные
> объекты - осколки, а появление из неоткуда новых планет
> отключить, либо по нажатию какой либо клавиши генерировать
> объекты пришельцы, а не неизвестно откуда появившиеся планеты.
* неоткуда ничего не берётся
* пришельцев тоже нет, есть то, что улетело в начале
> Притяжение, на глаз, какое-то не реалистичное :), две большие
> планеты пролетают рядом (думал столкнутся), но практически
> ничего не происходит, я ожидал что орбиты сильно изменятся.
> Аналогично, когда маленькая пролетает рядом с большой,
> она либо столкнётся, либо орбита незначительно изменится
> (хотя я ожидал, что она станет луной). Масштаб можно раза
> в 4 уменьшить, тогда на экране больше уместится и можно
> реализовать спутники.
* притяжение реалистичное, масштаб для отображения радиуса разный. притяжение происходит в масштабе системы... ой... =) мде =) тут надо поработать =)
* столкновение с осколками... в принципе любопытно, но я слабо представляю алгоритм создания осколков.
делаем вывод. в первую очередь - унифицировать масштаб.
← →
cyborg © (2006-06-02 12:48) [67]>>неоткуда ничего не берётся
Как же, не берётся :), убавляю кол-во объектов, но счётчик объектов всё равно стремится стать около 128, и они появляются ниоткуда, просто бац и появились :)
← →
cyborg © (2006-06-02 13:00) [68]>>но я слабо представляю алгоритм создания осколков.
Видимо тут нужно создавать в зависимости от скорости и угла столкновения, чем больше скорость, тем больше осколков, чем острее угол столкновения, тем больше размеры осколков наверное.
По каналу "Культура" дня четыре назад показывали, как Луна появилась, столкнулись две планеты, и компьютерная модель была показана, забавно :), столкнулись под острым уголм, градусов 30 или 45, не помню уже, примерно половина или треть второй планеты раздробилась в космос, а ядро отскочив, огибая Землю упала на неё, из обломков на орбите Луна собралась. Вот упрощённо, так сказать, рассказал :).
← →
Cash © (2006-06-02 13:42) [69]cyborg © (02.06.06 12:48) [67]:
Это я так сделал, чтоб самому каждый раз не добавлять звезды, тыж мою
штуку выходит смотрел. :)
cyborg © (02.06.06 13:00) [68]:
Да луны там сами на орбиту заходят, если есть все предпосылки к этому
заходу. (скорость сближения, соотношение масс, угол падения кометы на
планету и т. д.)
А осколки? Ты имееш ввиду брать и массу кометы частично восоздавать в
виде метеоров на орбите? Это тоже можно сделать. Но в этом случае
желательно еще и задавать вещество звезд. А это уже накладные расходы
и рост трудоемкости.
← →
cyborg © (2006-06-02 14:03) [70]Ну слишком много подробностей (достоверности) в виде типа материи и проч. не нужно, просто визуально хотелось бы более менее достоверную картинку наблюдать. Ну и чтобы красиво было :)
← →
Cash © (2006-06-02 14:13) [71]Красиво? Красиво - когда живо! © Cash. :)))
Реалистичность всегда красива. :)
Сплэшки красивые? Мне нравятся. Преподам моим тоже нравится, и в группе
моя репутация "психа" заметно выросла. :))))
← →
cyborg © (2006-06-02 14:22) [72]
> Сплэшки красивые? Мне нравятся.
У меня взрывы (спрайты) красивее есть, если их два одновременно совместмить - будет шоколад :)
← →
Cash © (2006-06-02 14:26) [73]Давай! Они в каком формате?
← →
Cash © (2006-06-02 14:54) [74]Эй, люди! Я тупой! :))) Опять! :D
Я забыл как для планеты сила гравитации рассчитывается из массы и т. д.
← →
Cash © (2006-06-02 15:55) [75]Ай... ладно, с горем пополам вспомнил...
← →
Cash © (2006-06-02 16:14) [76]Так, специально для товарища Думкина сделал систему без центральной
звезды. На мой взгляд центр масс никуда не уходит, звезды кружат по
всем канонам. Оптимизировать бы... Сообщите пожалуйста тормознее или
быстрее работает, чем из [33].
http://webfile.ru/974722
← →
cyborg © (2006-06-02 16:45) [77][73] Cash © (02.06.06 14:26)
Отправил, 50 кило всего, три взрыва, они у меня в БМП, но в джепеге практически идентичны, выслал в джепег. Два красных и один синий.
Отправил на ящик под твоим ником.
← →
Cash © (2006-06-02 16:59) [78]cyborg © (02.06.06 16:45) [77]:
В JPG??? Там же альфаканал рушится! Ладно посмотрю, если что скажу.
Чет у меня OutLook фигней страдает, погодя подкачаю.
← →
Fosgen (2006-06-02 17:54) [79]Думкин © (02.06.06 11:07) [63]
Г-ну Думкину:
Многоуважаемый оппонент, вот Вы вероятно являясь специалистом в области программирования и расчета систем небесных тел, все-таки неправы в своем подходе. Вы по неведомой мне причине считаете всех остальных напрофессиональными, некомпетентными и низкоинтеллектуальными детьми, берущимися не за свое дело. Не считая хотя бы того что это неуважительно по отношению к собеседникам, и демонстрирует исключительно Ваше воспитание, Вы попросту игнорируете следующие факты:
1. Вам уже 4-ре человека (начиная с создателя ветки) сообщили о принципах работы программы, исключающих первоначальный импульс системы. Программу я видел. Так мне очень интересно, как Вы увидели центр масс системы. Ведь графически он там никак не представлен...
2. Как Вы сами пишете: "Исходников не видел и т.п." - сл-но все Ваши аргументы - исключительно домыслы и оснований для тех или иных предположений у Вас нет. И говорить про "Покуа э\ти данные не рассчитываются " Вы так же не можете.
3. "если еще захотите читать мне лекции", а Вы спросили людей работающих над программой - хотят ли они слушать Ваши лекции? Если же Вы обратитесь к свободе слова и самовыражения на форуме - этот аргумент могу привести и я...
4. "Про ОТО - это мне под стол лезть смеяться? :)". Можете залезть в любое удобное Вам место, чтобы посмеяться над собой. Поскольку кроме этой Вашей фразы Вы не привели никаких аргументов в пользу Ваших утверждений. Пока что я вижу только подтверждения своих размышлений, особенно по Вашим: "Как и сказал прецессия будет вызвана внешними силами. А именно реакцией опоры и силой тяжести." Как-то странно что такой специалист, каким Вы несомненно являетесь, никак не осознает что те же самые силы действуют как на волчок со смещенным центром тяжести, так и на нормально сбалансированный волчок. Но траектории геометрических центров у них будут различаться.
Ожидаю Ваших обоснованных возражений по этому поводу.
← →
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]Не иначе как у меня "подсмотрел"? Ну что же, я не против, собственно для этого и выкладывал, но хоть бы кто слово про мою программулину сказал...
← →
tButton © (2006-06-12 07:22) [121]вообще-то не подсматривал.
← →
Prohodil Mimo © (2006-08-15 17:57) [122]tButton, выложи свою где-нибудь, ато все ссылки уже устарели. Или это я скачать не могу? Говорит что файл не найден.
← →
tButton © (2006-08-16 18:53) [123]счас положу
екзе
http://marcuch.ru/f/gravo.exe
сорц модуля с частицами
http://marcuch.ru/f/uPts.pas
← →
tButton © (2006-08-25 17:02) [124]и снова апаю тему
выложил пофикшеную версию
когда залез в исходники - очень удивился нафига у меня вместо быстрого real езде тормозной extended
http://marcuch.ru/f/gravo1.exe
← →
tButton © (2006-08-25 17:06) [125]странно, но компиляция из Д7 весит чуть ли не на 90кб больше =(
(441,5 против 358,0)
ничего нового не линковал, очевидно старые юниты стали больше =(
← →
XProger © (2006-08-25 17:20) [126]tButton, а можно полный исходник проекта получить?
← →
XProger © (2006-08-30 20:55) [127]После ряда оптимизаций кода:
http://xproger.mirgames.ru/tmp/gravo.rar
Итого, прирост скорости, практически в 3 раза :)
← →
tButton © (2006-08-31 09:34) [128]
> XProger © (30.08.06 20:55) [127]
алгоритм генерации не менял?
> Итого, прирост скорости, практически в 3 раза :)
за счёт кривости модели =)
← →
tButton © (2006-08-31 09:39) [129]вариант с повышеной юзабилитью (медленный, но верный)
http://marcuch.ru/f/gravo06.exe
кстати. когда компилял в D5 весил 380Кб
перекомпилял в D7 стал 554Кб
чешу репу
← →
Cash © (2006-08-31 09:41) [130]tButton, расскажи, чего новенького к этой вещи прикрутил!
Есть одна идейка, как эту вещь заставить побыстрее вертеться.
(Не математическое, а техническое решение)
← →
XProger © (2006-08-31 10:10) [131]tButton, дык код ты видел :) А вот кривость модели, сохранилась оригинальная (вроде ;)
← →
tButton © (2006-08-31 10:15) [132]расширил пользовательский интерфейс
добавил инфу по отслеживаемой точке
добавил сохранение/загрузку пересетов
добавил множитель зумов
из технического
добавил алгоритмы распределения массы в системе
XProger
хорошо поработал над оптимизацией
но от большей части идеи
в т.ч. от идеи которая давала основной прирост скорости
пришлось отказаться в виду её глючности
(ну расшатывается импульс и всё тут)
вот сейчас вспомнил, что при генерации системы извне можно задавать угловую скорость.
думаю прикрутить это к UI
ну и надо набраться мужества и унифицировать величины.
создать систему мер и весов =)
но это гемор, за который страшно браться =)
← →
tButton © (2006-08-31 10:17) [133]
> XProger © (31.08.06 10:10) [131]
видел.
а кривости в модели быть не может.
вся кривость устраняется на этапе создания системы
когда-то давно была кривость в объединении частиц.
но она давно уже пофикшена.
кривость возникла при оптимизации кода в CalcVectors
вот когда отдельно считаешь всё нормально
а когда для двух сразу по тем же формулам - криво =(
← →
Cash © (2006-08-31 11:00) [134]tButton, думается мне, те модули, что весят здесь отличаются от
последнего, дай ка позырить, я посмотрю, может удастся воплотить
в жизнь одну задумку.
← →
tButton © (2006-08-31 14:00) [135]даю свежак =)
http://marcuch.ru/f/uPts.pas
← →
Cash © (2006-08-31 14:42) [136]tButton © (31.08.06 14:00) [135]:
Tnx, взял. Ща будет...
← →
Sam Stone © (2006-08-31 15:52) [137]
> XProger © (30.08.06 20:55) [127]
Звезда не отключается
Если перезапустить несколько раз процесс без звезды получим AV
Но скорость радует :)
← →
Cash © (2006-08-31 16:27) [138]tButton, колись, какие Gamma и qarq выставляешь? :)
← →
Cash © (2006-08-31 18:58) [139]Cash © (31.08.06 16:27) [138]++
... да, а еще массы и радиус.
← →
tButton © (2006-09-01 10:55) [140]gamma = 1/6"000"000 (1.666e-7)
qarq = 0.0033
m = 1..5
r = 1.0
star.m = 50"000
это стандартные
есть интересные
m = 10..50
star.m = 250"000
(распределение массы - solar)
← →
Lamer@fools.ua © (2006-09-06 10:58) [141]>>tButton © (25.08.06 17:02) [124]
>когда залез в исходники - очень удивился нафига у меня вместо быстрого real езде тормозной extended
Реальный тип Real"а зависит от настроек компилятора (см. $REALCOMPATIBILITY). Лучше, IMHO, использовать явно Single либо Double (ну либо Real48 — для извращенцев :-) ).
← →
Cash © (2006-09-06 12:29) [142]Lamer@fools.ua © (06.09.06 10:58) [141]:
Согласен на 250%! :)
По большей части юзаю Single тип, для указания вершин этого более
чем достаточно.
← →
XProger © (2006-09-06 19:02) [143]Кто-нибудь ещё код оптимизировал? Куда спортсмены подевались? ;)
Страницы: 1 2 3 4 вся ветка
Форум: "Игры";
Текущий архив: 2007.08.12;
Скачать: [xml.tar.bz2];
Память: 1.1 MB
Время: 0.062 c