Comments 8
Вспомнилось. Интересный русскоговорящий автор, создающий симуляции эволюционных и генетических процессов.
на скриншоте где говорится про идеальный круг, извините, лесенка, последний обзор про скругления я смотрел про шрифт там показываются идеальные кривые(curve)(мне понравилось находить края и блюрить )), но там точки по безье заполняются как я понял, а тут можно будет просто загружать наверно идеальный круг текстуркой я думаю, а стоп, всё зависит от желания растеризация или полигонизация вроде, полигоны же тоже можно(сглаживать и/или масштабировать а тут как раз между точками curve по dt или t как раз 1 кружочек можно было бы и сгладить при помощи масштаба и луча(мы пускаем луч чтобы определить где будет точка, а контур это полностью curve кривая), и вернуть в малый масштаб был бы поидее идеальный круг)
Подскажите, может знаете каким кодеком лучше компрессировать видео с большим количеством движущихся объектов, вроде подобных симуляцией, а то у меня с x264 либо каша либо огромный объем, не сильно меньше чем raw?
Меня порадовала ваша статья. В конце 90-х годов, когда я только учился на программиста меня тоже вдохновила игра "Жизнь" Джона Конвея, на тот момент у меня была идея, которую мне очень хотелось проверить и я совместил изучение языка Ассемблер с разработкой своего эксперимента.
В отличие от вашей симуляции я использовал в качестве дискретного пространства простой двумерный массив. Так же как и у вас, количество частиц в моём эксперименте было постоянным, за один проход обработки массива частица могла переместиться в любое положение единичной окрестности, поэтому симуляции разных скоростей у меня не было, но для моего эксперимента это и не требовалось. У меня не было отдельного хранения частицы как структуры - все частицы хранились в байтовом массиве в виде значений от шестнадцати до тридцати двух. Значение ноль соответствовало пустому пространству, а значения от единицы до пятнадцати соответствовало полю частицы, которое я ввёл в качестве вспомогательного расчёта для вычисления перемещения частицы. Алгоритм перехода частицы был достаточно прост, я использовал два массива так как не хранил частицы отдельно. Для всех групп частиц я использовал один метод расчёта их перехода. Сначала я делал проход первого массива, вычислял новое положение каждой частицы и записывал результат во второй массив. Первым шагом прохода было наложение полей в единичную окрестность, для этого я просто вычитал из значения частицы пятнадцать и получал значение поля. Поля накладывались только в пустые окрестности, если рядом соседствовали две частицы, то их поля влияли друг на друга при помощи бинарной операции xor, которая подходила для этого потому как результат этой операции всегда давал значение не превышающее максимальное значение поля, то есть 15. Вторым шагом прохода был выбор подходящего направления перемещения, этот выбор происходил на основе значения поля в окрестностях частицы. В зависимости от группы частицы для неё подбирался переход в минимальное либо максимальное значение поля, если таких полей было больше одного, то я применял псевдослучайный выбор. После окончания прохода массива я выводил его на экран и менял массивы местами и далее это повторялось в цикле.
В результате я увидел самоорганизацию частиц, объединяясь в различные конгломераты они проявляли эмерджентные свойства, которые не были заранее жёстко запрограммированы. Я добавил параметризацию ключевых значений расчёта перехода, что позволило менять динамику и закономерности. Возникали различные структуры, так же как и у вас похожие на лабиринты, некоторые структуры получали свойство двигаться в определённом направлении, так же были структуры напоминающие рост кораллов.
Но у моей системы, так же как и у вашей был артефакт по границам пространства, там искажались законы системы. Этого артефакта можно избежать если программно замкнуть противоположные границы, превратив плоскость в развёртку тора.
Симуляция жизни частиц в браузере на WebGPU