Как я уже упоминал в комментариях, я не знаком с фазером или как вы на самом деле реализуете это в рамках Javascript. Моя цель здесь, возможно, дать вам несколько идей по различным способам продолжения, поэтому, надеюсь, вы найдете этот ответ полезным.
Я попытаюсь ответить на этот вопрос:
мне было интересно, как можно сделать этот тип тел. ... Я могу только заставить тело быть жестким, а не формульным и круговым, как хотелось бы.
Не обязательно ясно, что вы хотите дать этому предложению. Как я отметил в комментариях, что я думаю вы ищете пластичность, и я опишу способ, которым вы могли бы «обмануть», что выглядят с помощью нескольких простых инструментов.
В данный момент вы описываете движение своего тела «Это правда, что это тело не совсем жесткое и обладает таким упругим ощущением, когда оно сталкивается и затягивается.». В настоящее время ваша модель работает как таковая:
- Точка подключена ко всем остальным точкам, указанным в вашей сетке.
- Каждый раз каждый шаг вычисляет силу. Суммарная сила на суставе (или точке) является суммой всех этих парных сил.
- Каждое соединение связано с частью тела (то есть оно имеет некоторую массу
m
), и вы рассчитываете его ускорение с помощью acceleration = force/m
. Оттуда мы вычисляем velocity
и, наконец, position
.
Самая интересная часть вышеприведенных шагов - № 2, так как это значительно повлияет на движение всего тела. Очень распространенный способ его реализации - это как эластичный потенциал , который для определенного distance
между двумя точками дает force
. Как так:
function elasticPotential(p1, p2) {
// Given two positions p1 and p2 we calculate a force between them
distance = sqrt(pow(p1.x - p2.x, 2) + pow(p1.y - p2.y, 2) + pow(p1.z - p2.z, 2));
force = force_given_distance(distance); // A popular choice here is for example a spring force
return force;
}
Теперь вы уже имеете функцию, описанную выше вмонтированы в вашей рамке, так что вы не должны его реализовать. Причина, по которой я описываю это, состоит в том, что важно понимать, как мы можем создавать пластичность. Проблема с вышеизложенным заключается в том, что ничего не будет сохранить деформацию --- природа эластичного потенциала заключается в том, что у него есть некоторая конфигурация отдыха (скорее всего, ваша первая конфигурация), и она всегда будет пытаться вернуться к этой форме. Мы хотим, чтобы форма была как она была неправильной формы. Это и есть пластичность.
Простой пластичность
Примечания первым здесь, что проблема пластичности является большой темой исследований и во многих случаях далеко не тривиальный. Моя идея такова: если расстояние между двумя связанными точками больше некоторого порога, устранить точки в текущей конфигурации. То есть
for each pair(p1, p2):
if distance(p1, p2) > threshold:
recalculate_connection(p1, p2)
Как вы можете видеть, это очень простая модель для пластичности и, скорее всего, не является физически правильной. Тем не менее, должно быть возможно получить интересное поведение, которое я играю с ремишированием вместе с тем, какой эластичный потенциал вы выберете.
Если вы предоставите мне более подробную информацию, я, возможно, смогу обсудить проблему дальше, но сейчас я чувствую, что этот ответ уже длиннее, чем должно быть.
TL; DR: Создать "пластичную" форму с помощью вашего тела перестройки сетки в процессе деформации. Было бы сложно получить точное физическое поведение, но должно быть возможно создать нечто похожее на «гель-подобное».
Вы должны добавить в код вопроса.js, который вы использовали для этого, чтобы кто-то знает, как настроить его, чтобы заставить его вести себя так, как вы хотите, они смогут предоставить эту информацию. В настоящее время вопрос довольно широк и, скорее всего, получит голоса за не предоставление кода. Возможно, кто-то, кто знает, будет смотреть на ваш код и то, что вы пытаетесь сделать, и подтвердите, что файл matter.js не будет работать, но, не выставляя его, люди с меньшей вероятностью даже попытаются помочь. – Rodger
@Rodger Я согласен с тобой по-настоящему. Просто делаю то, что я делаю, просто басистом, создавая новый тип тела, уже определенный в файле matter.js. Я не думал, что это слишком актуально. –
Как только мой друг сделал гели, как на изображении, он создал круговую структуру с узлами и внутри он заполнил разделенные объекты и сохранил пустое пространство для объектов свободно перемещаться. Кольцо, содержащее объекты, имело некоторую эластичность, поэтому его форма легко изменилась. Я не знаю о Matter.js, но я думаю, вы можете сделать что-то подобное. –