1. Penalty method
Если бы могли симулировать пружинку идеально точно, то никаких проблем бы не было. Вот у нас два тела столкнулись. Мы поставили там жесткую пружинку и тела разлетятся. Cобственно метод Penalty method и реализует идею, что все можно описать через пружинки. Например, если два тела проникли друг в друга, то создаем выталкивающую пружинку.

Этого достаточно для реализации простейшего примера – двойной маятник. Здесь вместо палочек – жесткие пружинки.
Проблема в следующем. Если мы хотим жесткое ограничения, то нам нужно ставить очень жесткую пружинку. Если пружинка достаточно жесткая то практически любая схема развалится (кроме безусловно устойчивых, но и они тоже будут давать неадекватный результат) тк недостаточно точно симулируется пружинка. Если мы хотим чтобы симуляция не разваливалась, то нужно либо уменьшать шаг интегрирования, либо уменьшать жесткость пружинки. Но тогда ограничение становится мягким. В общем просто поиграйтесь и все поймете. Но даже если у вас все получится, то часто возникает проблема с высокочастотными колебаниями. И такие пружинки приходится настраивать для каждой системы отдельно.
Это условно твердое тело которое состоит из материальных точек. Здесь стоит simplectic Euler. Между всеми парами стоят пружинки с одинаковой жесткостью и дампингом. Это тело подвешено за верхнюю точку. Пока система мягкая численная схема хорошо справляется, но как только пытаешься сделать так чтобы твердое тело было твердым система разваливается. Поэтому если хотите использовать penalty method, то нужно либо использовать интегратор большей точности, либо уменьшать шаг по времени и немножеско страдать при настройке пружинок.
В общем в этом методе больше проблем чем решений. Поэтому используют другие методы.