Столкновение «пружины» и частицы

В настоящее время я пытаюсь создать простой 2D-физический движок, и мне просто нужно знать, как разрешить определенное столкновение.

У меня есть частицы, а между любыми двумя частицами могут быть связаны пружины. Эти пружины могут иметь переменное натяжение и длину. Теперь предположим, что у меня есть другая частица, которая сталкивается с этой пружиной. Я хотел бы разрешить это столкновение так, как если бы пружина не могла согнуться, когда в нее ударяет частица, а просто ведет себя как палка в реальном мире. Я сохраняю скорости и положения всех частиц, а не угловой момент, так как же мне обновить скорости всех частиц?

Вам нужен балочный элемент вместо пружинного элемента.
В моем собственном коде это пружина, но я просто спрашиваю, как разрешить столкновение, если вы должны рассматривать пружину как балку такой длины в момент их столкновения.

Ответы (1)

Найдите центр масс (ЦМ) двух соединенных частиц. Затем определите расстояние ( r ) от центра масс той части пружины, куда попала третья частица. Затем, если бы вы могли учесть время и силу столкновения во время контакта и предположить, что столкновение происходит без трения (это может быть сложно для точечных частиц и тонкой пружины, потому что время замедления означает, что у него может быть достаточно времени, чтобы пересечь другую сторону. ), вы можете использовать T = Fr (r — расстояние CM до ударной части), предположим, что направление силы перпендикулярно пружине (без трения) и F = Ma, тогда T = IA = Fr.

Для поступательного эффекта двух частиц: используйте F = Ma, чтобы найти ускорение центра масс, a = F/M, где M — сумма масс двух пружин, затем примените ускорение к двум частицам (ускорение то же направление силы, которое перпендикулярно пружине).

Для эффекта вращения: Fr = IA (A — угловое ускорение, I — момент инерции: I = m1(r1)^2 + m2(r2)^2, r1 и r2 — расстояния двух частиц от центра масс) , поэтому A = Fr/I. Тогда (пусть Q1, Q2 — тангенциальное ускорение частицы 1 и 2), Q1 = r1*A, Q2 = r2*A. Затем мы можем применить тангенциальное ускорение к двум частицам. если часть удара пружины находится между CM и частицей 1, Q1 будет тем же направлением, что и сила, а Q2 будет противоположным направлением. если часть удара пружины находится между CM и частицей 2, Q2 будет тем же направлением, что и сила, а Q1 будет противоположным направлением.

Для третьей частицы, попавшей в нее: Просто F = ma. но направление этой силы равно, но противоположно по направлению вышеуказанной силе (закон равного и противоположного противодействия)

Что касается используемой силы, вы можете использовать силу, которая зависит от (ближайшего) расстояния третьей частицы до пружины и активируется при достижении определенного расстояния (скажем, 0,5 единицы). Затем, возможно, используйте возрастающую силу, когда они становятся все ближе и ближе (как прыгающий мяч), скажем, например, потенциал Леннарда-Джонса, где F = -dU/dx.

Можете ли вы уточнить последний бит, пожалуйста?
@ 2.71828-asy Последний бит равен 1.
В качестве силы между третьей частицей и пружиной вы можете использовать любую силу отталкивания, то есть силу пружины: F = kx, электронную силу: F = k/(x^2) или аналогичную. Просто убедитесь, что оно равно нулю на определенном расстоянии (например, добавив некоторую константу), и увеличивайте силу по мере уменьшения расстояния. Сила будет ощущаться, когда расстояние между частицей и пружиной <= заданному расстоянию. Например, если вы используете «силу пружины», используйте F = k(x0-x), x0 — заданное расстояние (скажем, 0,5), а x — расстояние между третьей частью и пружиной.
k может быть любым, но вы можете сделать его большим, если хотите, чтобы он подпрыгивал быстрее. Затем применяйте силу только в том случае, если расстояние между третьей частицей и пружиной <= 0,5, а не тогда, когда они находятся далеко.
Я должен признать, что это не идеальный метод, поскольку он может не сохранить энергию в долгосрочной перспективе. То есть начальная полная энергия частиц (которую можно частично увидеть по их скоростям) в один момент времени может не совпадать позже в моделировании. за счет аппроксимации ускорения на интервале времени dt. Я бы предпочел использовать метод мгновенных столкновений, не завися от расчета ускорений и сил, но, к сожалению, я не знаю его формул при использовании во вращательных движениях. Надеюсь, кто-то может предоставить эту альтернативу.